“应用程序试图呈现一个主动控制器”?

我刚碰到一个崩溃,显示一个NSInvalidArgumentException这个消息在一个应用程序,这是以前没有这样做。

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

我有一个UITabBarController ,我在AppDelegate创build,并给它的UIViewControllers数组。

其中之一,我想模仿时,点击它。 我通过实现委托方法做到了这一点

 - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

如果该视图控制器是我想要模态呈现的类的类,那么我返回NO并执行

 [tabBarController presentModalViewController:viewController animated:YES]; 

现在我得到了这个错误,这似乎意味着你不能以模态方式呈现一个视图控制器,在其他地方(在tabbar中…)我应该说我在XCode 4.2开发者预览版7,所以这是iOS 5(我知道的NDA,但我想我没有给任何禁止的细节)。 我目前还没有XCode安装来testing这是否会崩溃编译对iOS4的SDK,但我几乎完全肯定它没有。

我只想问问有没有人遇到过这个问题或有什么build议

假设你有三个视图控制器像这样实例化:

 UIViewController* vc1 = [[UIViewController alloc] init]; UIViewController* vc2 = [[UIViewController alloc] init]; UIViewController* vc3 = [[UIViewController alloc] init]; 

你已经将它们添加到这样的标签栏:

 UITabBarController* tabBarController = [[UITabBarController alloc] init]; [tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]]; 

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

 [tabBarController presentModalViewController:vc3]; 

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

苹果希望你以某种方式对待他们的用户界面元素。 这大概是埋在人类接口指南的某个地方,因为“不要这样做,因为我们并不希望你永远不想这样做”。

我也有同样的问题。 我试图在解散之后呈现视图控制器。

 [self dismissModalViewControllerAnimated:YES]; 

当我试图做到没有animation,它完美的作品,所以问题是控制器还活着。 我认为最好的解决scheme是使用dismissViewControllerAnimated:completion:用于iOS5

我有同样的问题,我解决了。 你可以试试这个代码:

 [tabBarController setSelectedIndex:1]; [self dismissModalViewControllerAnimated:YES]; 

只要删除

 [tabBarController presentModalViewController:viewController animated:YES]; 

并保持

 [self dismissModalViewControllerAnimated:YES];