1

この話題はよく出ているようです。私はいくつかの回答を読みましたが、私のものと同じケースはありませんでした。

私の UIViewControllers はすべて UINavgationController によって制御されています。最初の UIViewController (SMOnboardingPhotoMarketingViewController) で、キーチェーン ラッパー クラスを呼び出して、ログインしているユーザー (アプリの再開) があるかどうかを確認します。その場合、セグエを呼び出してメインのログイン画面 (SMThumbnailViewController) に移動すると、エラー メッセージが表示されます。

ビュー コントローラーのライフサイクル呼び出しをすべて調べて、オーバーロードした場合に [スーパー メソッド] を呼び出していることを確認しました。終わり。

それ以外は、すべてのトランジションの標準的なプッシュ型セグエです。このセグエの呼び出しと、ボタン アクションによってトリガーされる他のすべての呼び出しとの違いがわかりません。最初のView Controllerのコードは次のとおりです。

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self loadScrollViewContent];

    __weak SMOnboardingPhotoMarketingViewController *weakSelf = self;
    [SMAuthentication validateStoredTokenWithCompletion:^(BOOL valid) {
        if(valid){
            NSLog(@"Logged in. Continue to thumbs page");
            [weakSelf performSegueWithIdentifier:kSeguePhotoMarketingToThumbnails sender:self];
        }
        else{
            [SMAuthentication logOut];
            NSLog(@"invalid credentials stored. User must log in ");
        }
    }];
}

私のメイン ビュー コントローラー (上記のコードが移動するコントローラー) では、viewDidLoad が呼び出されますが、viewDidAppear は呼び出されないことに気付きました。何がそのような不均衡を引き起こす可能性がありますか?

編集:情報を追加します。セグエ呼び出しをそのブロックの外側に移動すると、遷移はエラーなしで正常に行われます。例:

// I know this is ugly. It is for testing only
-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    [self loadScrollViewContent];
    __block BOOL complete = NO;
    __block BOOL isValid = NO;

    [SMAuthentication validateStoredTokenWithCompletion:^(BOOL valid) {
        if(valid){
            NSLog(@"Logged in. Continue to thumbs page");
            isValid = YES;
        }
        else{
            [SMAuthentication logOut];
            NSLog(@"invalid tokens stored. User must log in ");
        }
        complete = YES;
    }];



    while (!complete) {
        [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
    }

    if(isValid){
        [self performSegueWithIdentifier:kSeguePhotoMarketingToThumbnails sender:self];
    }

}
4

1 に答える 1

0

次の ViewController カスタム コンテナ メソッドを実装している可能性があります。

- (void)endAppearanceTransition
- (void)beginAppearanceTransition:(BOOL)isAppearing animated:(BOOL)animated

私はかつてそれらを基本クラスで書いて忘れていましたが、ストーリーボードを使用するときに子コントローラーに転送する全体の外観を台無しにしました。

于 2013-11-06T13:13:43.327 に答える