只能从主线程使用Xcode UIView.init(框架:)

我试图在后台线程中呈现一些视图,以不影响主线程。在Xcode 9之前,这从来都不是问题

DispatchQueue.global(qos:.background).异步{
让customView=UIView(帧:.0)
DispatchQueue.main.async{
self.view.addSubview(customView)
}
}

UIView.init(框架:)只能从主线程使用

此错误发生在第二行中

更新

苹果UIView文档实际上在线程注意事项部分中指出:

对应用程序用户界面的操作必须在主线程上进行。因此,您应该始终从应用程序主线程中运行的代码调用UIView类的方法只有在创建视图对象本身时才严格不需要这样做,但所有其他操作都应该在主线程上进行。

Xcode 9有一个新的运行时主线程检查器,它检测后台线程对UIKit的调用并生成警告

我知道它的目的是生成警告,而不是使应用程序崩溃,但您可以尝试禁用测试目标的主线程检查器

我在一个示例项目中尝试了这段代码,调试器在出现问题时暂停了(应该是这样),但应用程序没有崩溃

覆盖函数viewDidLoad(){
super.viewDidLoad()
DispatchQueue.global().async{
设v=UIView(帧:.0)
}
}

发表评论