Ios 我应该如何从TabBarController显示模态视图控制器

Ios 我应该如何从TabBarController显示模态视图控制器,ios,uitabbarcontroller,modalviewcontroller,Ios,Uitabbarcontroller,Modalviewcontroller,我有一个应用程序,它的初始场景是一个带有3个选项卡的选项卡栏控制器。我创建了一个uitabbarcontroller类,并将其设置为该场景(MainTabViewController) 在该类中,我从viewdide方法调用presentLogin,该方法如下: - (void)presentLogin{ NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; if (![prefs stringForKey:

我有一个应用程序,它的初始场景是一个带有3个选项卡的选项卡栏控制器。我创建了一个
uitabbarcontroller
类,并将其设置为该场景(
MainTabViewController

在该类中,我从
viewdide
方法调用presentLogin,该方法如下:

- (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
正在进行转换时,尝试从开始模式转换到。等待ViewDidDisplay/ViewDidEnglish以了解当前转换已完成

尝试添加如下微小延迟:

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    [self performSelector:@selector(presentLogin) withObject:nil afterDelay:0.1];
}

tabbarcontroller的视图包含选项卡栏本身拥有的ViewController的ViewHierarchy。也许是因为这个。如果只将一个viewcontroller设置为选项卡栏,请尝试查看是否仍会出现错误。

我相信您会出现此错误,因为选项卡栏控制器在显示模式控制器的同时将控制器的视图放置在屏幕上的第一个选项卡中。与其从选项卡栏控制器中显示,不如在第一个选项卡中控制器的ViewDidDisplay方法中显示。在没有动画的情况下调用它,以查看模态视图控制器,而不查看第一个选项卡控制器。

正是动画:否解决了此问题!谢谢。