0

ユーザー名とパスワードの資格情報を取得するモーダル ビュー コントローラーとして表示されるビューがあります。このビューでデリゲートをチェックし、ユーザーが以前にアプリのロック解除ピンを設定していない場合は、変更ピン ビューをモーダル ビュー コントローラーとして表示します。これは私のコードです...

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

次に CredentialsViewController で

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

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

4

2 に答える 2

2

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

presentModalViewController前の提案、から呼び出すviewDidAppearか、 に残す場合は遅延を設定することもできviewDidLoadます。CredentialsViewControllerがまだ表示されていないときに、 が 2 番目のビューを表示しようとしている可能性があります。

于 2011-08-23T16:24:00.610 に答える
0

if ステートメントがヒットし、2 番目の PresentModalViewController がエラーなしで実行されていますが、表示されていませんでした。コードを ViewDidAppear に配置して、applicationWillBecomeActive などの他の場所にも配置しようとしました。実際にコードをクラッシュさせるわけではありませんが、これらのアプローチのいずれもビュー コントローラーを表示しません。最終的に私はこれを選択しました:

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

ちょっとしたハックですが、今のところは十分です。ピンが設定されていないことを警告する何らかの通知をどこかに配置する必要があると思います。遅延についての提案はおそらくうまくいくと思います。今後やってみるかもしれません。みんなありがとう....ポイントアップ!

于 2011-08-24T08:48:28.267 に答える