警告:不鼓励在分离的视图控制器上呈现视图控制器

Warning: Presenting view controllers on detached view controllers is discouraged

我的情况与我在这里找到的所有其他示例都不一样。我有一个基于选项卡的应用程序。在其中一个选项卡上,用户可以按下按钮,一次性从网络服务器下载多个文件。

我使用 NSOperation 来执行这些下载中的每一个,这样我就可以利用内置的依赖项。下载全部发生在后台线程上,因此应用程序保持响应。最终下载完成后,我在屏幕上放置了一个 alertController,让用户知道下载完成。

如果用户在显示警报控制器时选择了不同的选项卡,我会收到警告:"Presenting view controllers on detached view controllers is discouraged"

如果它们仍在开始下载的同一个选项卡上,那么我就不会收到警告。我尝试替换:

[self presentViewController:alertController animated:YES completion:nil];

[self.view.window.rootViewController presentViewController:alertController animated:YES completion:nil];

但结果是永远不会显示 alertController。

我在主线程上展示 alertController。

我无法预测下载完成后用户将使用哪个选项卡视图控制器,我真的很想摆脱这个警告。

我正在使用 Obj-C 在 macOS 和 Xcode 8 上开发。

你需要将下载的结果委托给顶层视图控制器,这听起来像你的UITabBarControllerUITabBarController当然是knows which tab is selected,或者它可以对自己提出警报。

写入以修复当前 VC:

中呈现导航控制器或 VC 时的 警告
[self.view.window.rootViewController presentViewController:viewController animated:YES completion:nil];

修复关闭视图控制器时崩溃

[self dismissViewControllerAnimated:YES completion:nil];

如果您从 childViewController 呈现一个视图,它会向您发出该警告。为避免这种情况,您可以在 childViewController 的父级上呈现一个视图。

[self.parentViewController presentViewController:viewController animated:YES completion:nil];