3

最初のシーンが 3 つのタブを持つタブ バー コントローラーであるアプリがあります。uitabbarcontrollerクラスを作成し、そのシーンに設定しました ( MainTabViewController)。

そのクラスでは、メソッドから presentLogin を呼び出しviewDidAppear、そのメソッドは次のように読み取ります。

- (void)presentLogin{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    if (![prefs stringForKey:@"storedUser"] && ![prefs stringForKey:@"storedPass"]) {
        NSLog(@"No user prefs stored");

        // BUT WAIT, before all this, lets pop up a view controller for user registration
        UIStoryboard*  sb = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
        ModalViewController *popupController = [sb instantiateViewControllerWithIdentifier:@"ModalViewController"];
        [self presentViewController:popupController animated:YES completion:nil];

    } else {
        NSString *storedUser = [NSString stringWithFormat:@"User:%@",[prefs stringForKey:@"storedUser"]];
        NSString *storedPass = [NSString stringWithFormat:@"User:%@",[prefs stringForKey:@"storedPass"]];
        UIAlertView *internetAlert = [[UIAlertView alloc] initWithTitle:storedUser
                                                                message:storedPass
                                                               delegate:self
                                                      cancelButtonTitle:@"Cancel"
                                                      otherButtonTitles:@"Ok", nil];
        [internetAlert show];

    }
}

しかし、modalVC何らかの理由で表示されません。私はこのクラッシュログを取得します:

Attempting to begin a modal transition from <MainTabViewController: 0xa55d0d0> to <ModalViewController: 0x15e2b5e0> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed
4

3 に答える 3

3

モーダルコントローラーを表示しているときに、タブバーコントローラーがコントローラーのビューを画面上の最初のタブに配置しているため、このエラーが発生すると思います。タブ バー コントローラーから表示する代わりに、最初のタブのコントローラーの viewDidAppear メソッドで表示します。最初のタブ コントローラーを表示せずにモーダル ビュー コントローラーを表示するには、アニメーションなしで呼び出します。

于 2013-09-07T15:22:02.700 に答える
1

以下のような小さな遅延を追加してみてください。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self performSelector:@selector(presentLogin) withObject:nil afterDelay:0.1];
}
于 2013-09-07T14:58:58.547 に答える