我在故事板中有一个UITabBarController,它有一个导航控制器作为选项卡条项之一。当我尝试在导航控制器的根视图控制器上执行[self presentViewController:myVC animated:YES completion:NULL]
时,应用程序停止响应,并在控制台上得到以下错误/警告
2015-10-16 18:21:40.175 My_App[1224:488753] Presenting view controllers on detached view controllers is discouraged <MyViewController: 0x16512b00>.
只有当应用程序是使用Xcode-7.0.1构建并在iOS-9上运行时,我才会遇到这个问题。它在使用Xcode-7.0.1的iOS-8上工作得很好,甚至在使用Xcode 6.4构建的iOS-9上也是如此。
编辑:
这是我的视图控制器层次结构,就在我展示来自myVC
的myRootViewController
之前。
(lldb) po [UIViewController _printHierarchy]
<LibraryTabBarController 0x7f91935e9660>, state: appeared, view: <UILayoutContainerView 0x7f9195841420>
| <UINavigationController 0x7fe46b863200>, state: appeared, view: <UILayoutContainerView 0x7fe46b54c6a0>
| | <MyRootViewController 0x7fe46b47aa40>, state: appeared, view: <UIView 0x7fe46b66f8a0>
| <MyOtherViewController 0x7f919580fd80>, state: disappeared, view: (view not loaded)
发布于 2015-10-16 13:32:52
错误消息表明,您从视图控制器中呈现的视图控制器在视图控制器层次结构中(还没有)。也许您已经实例化了self
引用的视图控制器,但尚未将其添加到选项卡的视图控制器集合中。也许你正试图在prepareForSegue
中做到这一点。也许您为子视图控制器执行了addSubview
,但忽略了执行必要的视图控制器包含调用(例如,addChildViewController
)。可能会有很多问题。我建议您先描述一下self
本身是如何出现的,然后再考虑它如何显示其他视图控制器。
如果您认为self
已经在视图控制器层次结构中,我建议我们确认这一点。从Xcode运行该应用程序,在您进入显示VC
的代码行之前,请按调试器的暂停按钮:
在(lldb)
提示符下,输入:
po [UIViewController _printHierarchy]
或者,如果您在Swift帧中暂停,您可以输入:
expr -l objc++ -O -- [UIViewController _printHierarchy]
你应该看到这样的东西:
(lldb) po [UIViewController _printHierarchy]
<UITabBarController 0x7fcae1c19740>, state: appeared, view: <UILayoutContainerView 0x7fcae1c26730>
| <UINavigationController 0x7fcae3012c00>, state: appeared, view: <UILayoutContainerView 0x7fcae1d10b90>
| | <MyApp.ViewController 0x7fcae1c19cd0>, state: appeared, view: <UIView 0x7fcae1c2c470>
| <SecondViewController 0x7fcae1e1b860>, state: disappeared, view: (view not loaded)
确认self
在您的问题中引用的任何视图控制器都出现在视图控制器层次结构中。如果是这样,请向我们展示您的视图控制器层次结构和哪个self
。
https://stackoverflow.com/questions/33171566
复制相似问题