Obj C - 一个接一个地呈现视图控制器

Obj C - Present view controllers one after another

这可能很简单,但我正在绞尽脑汁找出问题所在。

我正在展示一个 UINavigationController,一旦它被取消,我需要展示另一个 UITabBarController,当我这样做时,我得到以下错误

Warning: Attempt to present < MyTabBarViewController: 0xXXXX > on < ParentViewController: 0XXX> whose view is not in the window hierarchy!

UINavigationController *nav = [self.storyboard instantiateViewControllerWithIdentifier:@"myWeb"];
MyWebViewController *webVC = (MyWebViewController *)nav.topViewController;
[self presentViewController:webVC animated:YES completion:nil];

我可以看到 MyWebViewController 的呈现没有任何问题,一旦上一个被驳回,我尝试像下面那样呈现下一个,我收到上述警告。

MyTabBarViewController *trController = [[MyTabBarViewController alloc] init];
[self presentViewController:trController animated:NO completion:nil];

只有当 MyWebViewController 完成关闭时,您才需要呈现 MyTabBarViewController, 尝试像这样添加延迟:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
    MyTabBarViewController *trController = [[MyTabBarViewController alloc] init];
    [self presentViewController:trController animated:NO completion:nil];
});

如果可行,您将需要摆脱它(以防您希望保持代码整洁)并在 completion 中调用委托方法,告诉父级 MyTabBarViewController 已准备好显示.