quot;Application tried to present modally an active controllerquot;?(“应用程序试图以模态方式呈现活动控制器?)
问题描述
我刚刚遇到一个崩溃,显示 NSInvalidArgumentException
并在之前没有这样做的应用程序上显示此消息.
I just came across a crash showing a NSInvalidArgumentException
with this message on an app which wasn't doing this before.
应用程序试图以模态方式呈现一个活动控制器UITabBarController: 0x83d7f00.
Application tried to present modally an active controller UITabBarController: 0x83d7f00.
我有一个 UITabBarController
我在 AppDelegate
中创建并给它一个 UIViewControllers
数组.
I have a UITabBarController
which I create in the AppDelegate
and give it the array of UIViewControllers
.
其中一个我想在点击它时以模态方式呈现.我通过实现委托方法做到了这一点
One of them I want to present modally when tapped on it. I did that by implementing the delegate method
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
如果该视图控制器属于我要以模态方式呈现的视图控制器,则返回 NO 并执行
If that view controller is of the class of the one I want to present modally, I return NO and do
[tabBarController presentModalViewController:viewController animated:YES];
现在我得到了那个错误,这似乎意味着你不能以模态方式呈现一个在其他地方(在标签栏......)处于活动状态的视图控制器我应该说我在 XCode 4.2 Developer Preview 7 上,所以这是 iOS 5(我知道 NDA,但我认为我没有提供任何禁止的细节).我目前没有安装 XCode 来测试针对 iOS4 SDK 编译是否会崩溃,但我几乎完全可以肯定它不会.
And now I'm getting that error, which seems to mean that you can't present modally a view controller that is active somewhere else (in the tabbar...) I should say I'm on XCode 4.2 Developer Preview 7, so this is iOS 5 (I know about the NDA, but I think I'm not giving any forbidden details). I currently don't have an XCode installation to test if this crashes compiling against the iOS4 SDK, but I'm almost entirely sure it doesn't.
我只想问有没有人遇到过这个问题或者有什么建议
I only wanted to ask if anyone has experienced this issue or has any suggestion
推荐答案
假设你有三个视图控制器实例化如下:
Assume you have three view controllers instantiated like so:
UIViewController* vc1 = [[UIViewController alloc] init];
UIViewController* vc2 = [[UIViewController alloc] init];
UIViewController* vc3 = [[UIViewController alloc] init];
您已将它们添加到这样的标签栏:
You have added them to a tab bar like this:
UITabBarController* tabBarController = [[UITabBarController alloc] init];
[tabBarController setViewControllers:[NSArray arrayWithObjects:vc1, vc2, vc3, nil]];
现在你正在尝试做这样的事情:
Now you are trying to do something like this:
[tabBarController presentModalViewController:vc3];
这会给你一个错误,因为选项卡栏控制器对你给它的视图控制器有一个死锁.您可以不将其添加到选项卡栏上的视图控制器数组中,也可以不以模态方式呈现.
This will give you an error because that Tab Bar Controller has a death grip on the view controller that you gave it. You can either not add it to the array of view controllers on the tab bar, or you can not present it modally.
Apple 希望您以某种方式对待他们的 UI 元素.这可能隐藏在人机界面指南中的某个地方,即不要这样做,因为我们不希望您这样做".
Apple expects you to treat their UI elements in a certain way. This is probably buried in the Human Interface Guidelines somewhere as a "don't do this because we aren't expecting you to ever want to do this".
这篇关于“应用程序试图以模态方式呈现活动控制器"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:“应用程序试图以模态方式呈现活动控制器&quo
基础教程推荐
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01