我现在遇到了几个案例,它们可以方便地找到"最顶层"的视图控制器(负责当前视图的控制器),但还没有找到办法.
基本上挑战是这样的:假设一个人在一个不是视图控制器(或视图)的类中执行[并且没有活动视图的地址]并且还没有传递最顶层视图控制器的地址(或者说,导航控制器的地址),是否可以找到该视图控制器?(如果是这样,怎么样?)
或者,如果失败了,是否有可能找到最顶层的视图?
在我的应用程序中,我使用的是导航控制器.稍后在某些视图中,我presentViewController用于显示缩放的图像.我也没有使用故事板或笔尖.
我只在iOS 7中收到此错误.它在iOS 6及更早版本中运行良好:
不鼓励在分离的视图控制器上呈现视图控制器
我的情况与我在这里找到的所有其他例子不同.我有一个基于标签的应用程序.在其中一个选项卡上,用户可以按下一个按钮,该按钮可以同时从Web服务器下载多个文件.
我使用NSOperation来执行每个下载,以便我可以利用内置的依赖项.下载都发生在后台线程上,因此应用程序保持响应.最后的下载完成后,我在屏幕上放置了一个alertController,让用户知道它们已经完成.
如果用户在显示警报控制器时选择了不同的选项卡,则会收到警告:"不建议在分离的视图控制器上显示视图控制器"
如果它们仍然在开始下载的相同选项卡上,那么我不会收到警告.我试过更换:
[self presentViewController:alertController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
同
[self.view.window.rootViewController presentViewController:alertController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
但结果是从不出现alertController.
我在主线程上呈现alertController.
我无法预测下载完成时用户将使用哪个选项卡视图控制器,并且真的想要摆脱此警告.
我正在使用Obj-C开发macOS和Xcode 8.