警告:在已分离的视图控制器上呈现视图控制器是不被鼓励的。
警告:在已分离的视图控制器上呈现视图控制器是不被鼓励的。
我的情况与我在这里找到的每个其他示例都不同。我有一个基于选项卡的应用程序。在其中一个选项卡上,用户可以按下一个按钮,一次性从Web服务器下载多个文件。
我使用NSOperation执行每个下载操作,以便可以利用内置的依赖关系。所有的下载都在后台线程上进行,所以应用程序保持响应。当最后一个下载完成时,我会在屏幕上放置一个alertController,告诉用户下载已完成。
如果在呈现alertController时用户选择了其他选项卡,我会收到警告:“不鼓励在分离的视图控制器上呈现视图控制器”。
如果他们仍然在开始下载的相同选项卡上,我就不会收到这个警告。我尝试替换:
[self presentViewController:alertController animated:YES completion:nil];
为
[self.view.window.rootViewController presentViewController:alertController animated:YES completion:nil];
但结果是alertController从未被呈现。
我在主线程上呈现alertController。
我无法预测用户在下载完成时将在哪个选项卡视图控制器上,而且真的很想摆脱这个警告。
我正在使用macOS和带有Obj-C的Xcode 8进行开发。
当在一个已经从视图层级中分离的视图控制器上弹出一个新的视图控制器时,会出现警告信息"Warning: Presenting view controllers on detached view controllers is discouraged"。这个问题的出现是因为在弹出新的视图控制器时,应该使用当前视图控制器的父视图控制器来进行弹出操作,而不是直接在当前视图控制器上进行操作。
解决方法是,在弹出新的视图控制器时,使用当前视图控制器的父视图控制器来进行弹出操作。具体做法是使用`parentViewController`属性来获取当前视图控制器的父视图控制器,然后调用`presentViewController:animated:completion:`方法来弹出新的视图控制器。
示例代码如下:
[self.parentViewController presentViewController:viewController animated:YES completion:nil];
这样就可以避免在已经分离的视图控制器上弹出新的视图控制器时出现警告信息的问题。另外,如果需要关闭当前视图控制器,可以使用`dismissViewControllerAnimated:completion:`方法来进行关闭操作,也需要注意在调用该方法时,使用当前视图控制器的父视图控制器来进行操作。
示例代码如下:
[self.parentViewController dismissViewControllerAnimated:YES completion:nil];
通过以上方法,我们可以避免在弹出和关闭视图控制器时出现警告信息和崩溃的问题。