0

私は、ユーザ名とパスワードの認証情報を受け取るモーダルビューコントローラとして表示されるビューを持っています。このビューでデリゲートをチェックし、ユーザーが以前にアプリケーションのロック解除ピンを設定していない場合は、変更ピンビューをモーダルビューコントローラとして表示します。これは私のコード... CredentialsViewControllerModalViewController内にModalViewControllerを表示する

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    if([appDelegate.pin isEqualToString: @""]){ 
     UserPrefsViewController *upvc = [[UserPrefsViewController alloc] init]; 
     upvc.cancelButton.hidden = true; 
     [self presentModalViewController:upvc animated:FALSE]; 
    } 
} 

しかし、それは動作しません何らかの理由で

+(void)presentCredentialsViewController:(UIViewController *)vc{ 
    CredentialsViewController *cvc = [[CredentialsViewController alloc] init]; 
    [vc presentModalViewController:cvc animated:FALSE]; 
} 

してからです。デバッガはエラーなしでコードをステップ実行しますが、2番目のモーダルビューコントローラは表示されません。

+1

このコードを 'viewDidAppear'に入れるとどうなりますか? – Jilouc

答えて

2

まず、appDelegate.pinが空白で、nilでないことを確認することをお勧めします。それがnilの場合、ifステートメントは満たされず、2番目のModalViewは表示されません。

presentModalViewControllerviewDidAppearから呼び出すか、viewDidLoadのままにしておくと遅延を設定することもできます。 CredentialsViewControllerは、それ自体がまだ提示されていないときに第2のビューを提示しようとしている可能性があります。

0

ifステートメントがヒットし、2番目のPresentModalViewControllerがエラーなしで実行されていますが、表示されていません。私は、ViewDidAppearにコードを入れてみました。そして、applicationWillBecomeActiveなどの他の場所もロードしました。実際にはコードをクラッシュさせませんでしたが、これらのアプローチのどれもView Controllerを表示しませんでした。最後に私はこれを選択しました:

start with pin of @"" 
on applicationDidEnterBackground check if pin has been set 
if yes 
PresentModalViewController: PinViewController 
if no 
do nothing 

ハックのビットは今のところ行います。私はピンが設定されていないことを警告する何らかの通知をどこかに置くべきだと思います。遅延についての提案は、おそらく私が想定するように動作する可能性があります。私はそれを将来に渡すかもしれない。ありがとうございました....ポイントアップ!

関連する問題