0

これまで、私のアプリには 1 つのメイン ビュー コントローラー ( MainViewController) とログイン ビュー コントローラー ( LoginViewController) しかありませんでしたが、現在はタブ バー コントローラーに移行しています。

キーチェーンにユーザー名とパスワードが存在するかどうかviewDidLoadを簡単に確認する前に。MainViewControllerユーザー名とパスワードが存在しない場合は、セグエを使用してモーダル ログイン ビュー コントローラーをポップアップしました。

タブ バー コントローラーを使用する新しいセットアップでは、まだMainViewControllerルート ビュー コントローラーであるビュー コントローラー (

viewDidLoadof でセグエを呼び出すと、次のようになりますMainViewController

[self performSegueWithIdentifier:@"loadLoginView" sender:nil];

このエラーが発生しています:

 Warning: Attempt to present <LoginViewController: 0x1757cd80> on <UITabBarController: 0x17571e50> whose view is not in the window hierarchy!

しかし、ボタンをLoginViewControllerセグエ経由でロードするメソッドに関連付けると、正常に動作します。私はMainViewControllerこのようにそれをやっています:

-(void)loadLogin
{
    [self performSegueWithIdentifier:@"loadLoginView" sender:nil];
}

エラー メッセージから、viewDidLoadofからセグエを実行しようとすると、 fromMainViewControllerをロードしようとしていることがわかります。LoginViewControllerUITabBarController

LoginViewControllerからviewDidLoadをロードできないのはなぜMainViewControllerですか?

これに関するどんな助けも素晴らしいでしょう。

ありがとう!

4

1 に答える 1

1

-viewDidLoadビュー コントローラ スタックがウィンドウに追加される前に呼び出されているようです。あなたが試すことができる2つのことは次のとおりです。

次回の実行ループまで遅延します (これにより、View Controller が適切な状態になるまでの時間が与えられます) [self performSelector:@selector(loadLogin) withObject:self afterDelay:0];。このメソッドでは、2 つの引数を持つメソッドを直接呼び出すことはできません

を使用できます-presentViewController: animated: completion:。これにより、ログイン コントローラーが下からスライドします。

于 2013-07-03T20:43:12.653 に答える