我刚刚遇到撞车事故显示NSInvalidArgumentException使用此消息在以前从未这样做的应用程序上使用。

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

我有一个UITabBarController我在AppDelegate并给它数组UIViewControllers

其中一个我想在上面敲击时呈现。我通过实施委托方法来做到这一点

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

如果该视图控制器是我想呈现的一个类别的类

[tabBarController presentModalViewController:viewController animated:YES];

现在我遇到了这个错误,这似乎意味着您无法在其他地方活跃的视图控制器(在Tabbar中…)我应该说我在Xcode 4.2开发人员Preview 7,所以这是iOS 5(我知道NDA,但我认为我没有提供任何禁止的细节)。我目前没有XCode安装来测试这是否会崩溃对IOS4 SDK的崩溃,但我几乎完全确定不是。

我只想问是否有人经历了这个问题或有任何建议

答案

假设您有三个视图控制器,例如:

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];

这会给您带来错误,因为该标签栏控制器对您给它的视图控制器具有死亡抓地力。您可以将其添加到标签栏上的视图控制器的数组中,也无法将其添加到模仿中。

苹果希望您以某种方式对待其UI元素。这可能被埋葬在人类界面指南中,因为"不要这样做,因为我们不希望您想这样做"。

来自: stackoverflow.com