"应用程序试图以模态方式呈现一个活动控制器"?

Jav*_*oto 94 objective-c ios ios5

我刚刚遇到一个崩溃NSInvalidArgumentException,在一个以前没有这样做的应用程序上显示此消息.

应用程序尝试以模态方式呈现活动控制器UITabBarController:0x83d7f00.

我有一个UITabBarController我在其中创建AppDelegate并给它的数组UIViewControllers.

其中一个我想在点击它时以模态方式呈现.我通过实现委托方法来做到这一点

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
Run Code Online (Sandbox Code Playgroud)

如果该视图控制器属于我想以模态方式呈现的类,我返回NO并执行

[tabBarController presentModalViewController:viewController animated:YES];
Run Code Online (Sandbox Code Playgroud)

现在我收到了这个错误,这似乎意味着你不能在模式上呈现一个在其他地方活动的视图控制器(在tabbar中......)我应该说我在XCode 4.2 Developer Preview 7上,所以这是iOS 5(我知道NDA,但我认为我没有提供任何禁止的细节).我目前没有XCode安装来测试这是否会崩溃编译iOS4 SDK,但我几乎完全确定它没有.

我只想询问是否有人遇到过此问题或有任何建议

lsw*_*ank 94

假设您有三个视图控制器实例化如下:

UIViewController* vc1 = [[UIViewController alloc] init];
UIViewController* vc2 = [[UIViewController alloc] init];
UIViewController* vc3 = [[UIViewController alloc] init];
Run Code Online (Sandbox Code Playgroud)

您已将它们添加到标签栏,如下所示:

UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]];
Run Code Online (Sandbox Code Playgroud)

现在你正试图做这样的事情:

[tabBarController presentModalViewController:vc3];
Run Code Online (Sandbox Code Playgroud)

这会给你一个错误,因为标签栏控制器在你给它的视图控制器上有一个死锁.您可以不将其添加到选项卡栏上的视图控制器数组,也不能以模态方式显示它.

Apple希望您以某种方式处理他们的UI元素.这可能隐藏在人机界面指南的某个地方,因为"不要这样做,因为我们不希望你想要这样做".

  • 事情是这在iOS 5之前绝对没有问题,因此我担心!我所做的是将一个虚拟UIViewController添加到tabbar并以模态方式呈现实际的视图控制器子类实例. (6认同)

Dan*_*nil 14

我也有同样的问题.我试图在解雇后提出视图控制器.

[self dismissModalViewControllerAnimated:YES];
Run Code Online (Sandbox Code Playgroud)

当我尝试在没有动画的情况下完成它时它完美地工作,所以问题是控制器仍然存在.我认为最好的解决方案是dismissViewControllerAnimated:completion:用于iOS5

  • 它在IOS 6.0中被删除 (2认同)

Kar*_*esh 7

在我的情况下,我试图从不同的视图控制器中呈现viewController(我在TabBarViewController中有viewController的引用),并且由于上述消息而崩溃。在这种情况下,为避免出现您可以使用

viewController.isBeingPresented

!viewController.isBeingPresented {
          // Present your ViewController only if its not present to the user currently.
}
Run Code Online (Sandbox Code Playgroud)

可能会帮助某人。

  • 不为我工作。仍然会导致应用程序崩溃。(!viewController.presentingViewController) 解决了问题。 (2认同)

Nik*_*Nik 7

present当我尝试使用子视图控制器而不是UINavigationViewController其父视图控制器时,同样的问题发生在我身上