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

时间:2011-09-15 09:55:18

标签: objective-c ios ios5

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

  

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

我在UITabBarController创建了AppDelegate,并为其提供了UIViewControllers数组。

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

来做到这一点
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController

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

[tabBarController presentModalViewController:viewController animated:YES];

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

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

9 个答案:

答案 0 :(得分:88)

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

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

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

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

答案 1 :(得分:12)

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

[self dismissModalViewControllerAnimated:YES];

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

答案 2 :(得分:5)

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

  

viewController.isBeingPresented

!viewController.isBeingPresented {
          // Present your ViewController only if its not present to the user currently.
}

可能会帮助某人。

答案 3 :(得分:4)

当我尝试present代替其UINavigationViewController父视图的子视图控制器时,发生了同样的问题错误

答案 4 :(得分:2)

我有同样的问题。我解决了。您可以尝试此代码:

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

答案 5 :(得分:2)

对于 React Native Developer - 问题可能不在 AppDelegate 或 main.m 中,如果应用程序已成功构建并正在运行并且会在启动后崩溃或可能是错误屏幕

问题可能是由于使用了 xcode 不可用且未正确配置的字体/资源。您可以通过注释从 App.js 开始的某些部分并钻入导航/屏幕并注释组件,直到您找到产生错误的组件....

在我的例子中,fontFamily 的资源产生了一个问题,在演练屏幕启动后立即使用

<Text style={{fontFamily: Fonts.roboto}}>ABC</Text>

这里的roboto字体没有正确配置。浪费了一整天只是调试错误希望它可以帮助您

答案 6 :(得分:0)

只需删除

[tabBarController presentModalViewController:viewController animated:YES];

并保持

[self dismissModalViewControllerAnimated:YES];

答案 7 :(得分:0)

代替使用:

self.present(viewControllerToPresent: UIViewController, animated: Bool, completion: (() -> Void)?)

您可以使用:

self.navigationController?.pushViewController(viewController: UIViewController, animated: Bool)

答案 8 :(得分:0)

在我的情况下,我本应该展示<section id="first-section"> <h1 class="inspire" data-aos="fade-right"> HERE TO: </h1> <div class="change-text" data-aos="fade-right"></div> </section>本身时却展示了rootViewController的{​​{1}}。