Xcode-7.0.1: 在分离的视图控制器上呈现视图控制器是不被鼓励的。

9 浏览
0 Comments

Xcode-7.0.1: 在分离的视图控制器上呈现视图控制器是不被鼓励的。

我在故事板中有一个UITabBarController,其中一个选项卡栏项目是一个导航控制器。当我尝试在我的导航控制器的根视图控制器上执行[self presentViewController:myVC animated:YES completion:NULL]时,应用程序停止响应,并在控制台上出现以下错误/警告信息:

2015-10-16 18:21:40.175 My_App[1224:488753]不建议在分离的视图控制器上呈现视图控制器 

只有当使用Xcode-7.0.1构建应用程序并在iOS-9上运行时,我才遇到这个问题。它在使用Xcode 6.4构建的iOS-8上以及甚至在iOS-9上都能完美运行。

编辑:

这是在我从myRootViewController中呈现myVC之前的我的视图控制器层次结构。

(lldb) po [UIViewController _printHierarchy]
,状态:出现,视图:
   | ,状态:出现,视图:
   |    | ,状态:出现,视图:
   | ,状态:消失,视图:(未加载视图)

0
0 Comments

原因:错误消息表明,您正在从中呈现的视图控制器(self)尚未在视图控制器层次结构中。可能您已实例化一个视图控制器,并且尚未将其添加到选项卡栏的视图控制器集合中。可能您正在尝试在prepareForSegue中执行此操作。可能您为子视图控制器执行了addSubview操作,但忽略了必要的视图控制器包含调用(例如addChildViewController)。可能涉及很多问题。在我们担心它如何呈现其他视图控制器之前,建议您描述一下self本身是如何被呈现的。

解决方法:如果您认为self已经在视图控制器层次结构中,建议我们进行确认。从Xcode运行应用程序,在到达呈现VC的代码行之前,按下调试器的暂停按钮。在(lldb)提示符处输入以下内容:

po [UIViewController _printHierarchy]

或者,如果您在Swift帧中暂停,可以输入:

expr -l objc++ -O -- [UIViewController _printHierarchy]

您应该会看到类似以下的内容:

(lldb) po [UIViewController _printHierarchy]

, state: appeared, view:

| , state: appeared, view:

| | , state: appeared, view:

| , state: disappeared, view: (view not loaded)

确认您在问题中提到的任何视图控制器是否出现在此视图控制器层次结构中。如果是,请向我们展示您的视图控制器层次结构以及self是哪一个。

以上是关于错误消息"Xcode-7.0.1: Presenting view controllers on detached view controllers is discouraged"出现的原因及解决方法的整理。

0