我使用adressbookframework导入数据并将联系人存储在核心数据中。该方法包含在GCD中,但UI没有响应,所有代码都在线程1上执行。我的代码出了什么问题?
func importContacts(){
dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_BACKGROUND.value), 0)) {
self.importContactsFromAdressbook()
}
}
答案 0 :(得分:3)
首先,您使用dispatch_get_global_queue
并将QOS_CLASS_BACKGROUND
指定为您的操作队列。这将导致您的块在后台任务的线程中执行,这不是主线程。
该方法包含在GCD中,但UI不响应...
如果我理解正确,您正在尝试更新块中的UI。这是不允许的。 Cocoa UI框架(包括UIKit和AppKit)不线程安全。 UI元素的任何更新/交互必须在主线程上完成。
因此,如果您的importContactsFromAdressbook
涉及用户界面,则应使用dispatch_get_main_queue
将其发送到主线程。