- 必须仅从主线程调用[UIApplication委托]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了- 必须仅从主线程调用[UIApplication委托]相关的知识,希望对你有一定的参考价值。

这个警告导致一个严重的问题,因为我真的无法使用Xcode 9 beta 2在主线程之外调用委托。奇怪的是,当我使用Xcode 8.3.3时,这是有效的。

另外我认为只从主线程调用委托只是好习惯,不是吗?那么为什么这会导致应用程序崩溃呢?

答案

只需从主线程中调用它即可。

dispatch_async(dispatch_get_main_queue(), ^{
  [[UIApplication delegate] fooBar];
});

像这样与您的应用代表联系,暗示您的架构可以使用一点清理。

您可以从任何您想要的线程调用代理。你只需要确保你在UIKit调用的主线程上。或者您正在使用CoreData对象所期望的正确线程。这完全取决于您的对象具有的API合约。

另一答案

在Swift中,您还可以使用DispatchQueue.main.async从主线程调用UI控制方法

DispatchQueue.main.async {
    YourUIControlMethod()
}

以上是关于- 必须仅从主线程调用[UIApplication委托]的主要内容,如果未能解决你的问题,请参考以下文章

语义发布配置为仅从主发布

目标c只能从主线程调用

即使从主线程调用更新,UI 也不会更新

SetActive() 只能从主线程调用

在 Apple 的 Cocoa API 中,为啥从主线程调用 NSApplicationMain 很重要?

UIApplication.delegate必须仅在主线程中使用[复制]