即使我指定在主线程上运行,主线程也迅速变为NULL

时间:2018-10-19 05:08:50

标签: ios swift multithreading

我正在使用该代码在Myphone上获取联系人

DispatchQueue.main.async {
        let allowedCharset = CharacterSet
            .decimalDigits
        let store = CNContactStore()
        //store.requestAccess(for: .contacts, complete:() -> ()) { (granted,err) in
        store.requestAccess(for: .contacts) { (granted, err) in
            if let error = err
            {
                print("failed to access",error)
                return
            }
            if (granted)
            {
                print(Thread.current)}

但是我发现UI死机了,即使我将其指定为在mainThread上运行,但我仍得到当前线程为NULL。

print(Thread.current)=

1 个答案:

答案 0 :(得分:2)

我想问题是您在store.requestAccess的完成处理程序中进行了一些UI更新。

根据Apple的文档,处理程序不是在主(UI)线程中调用,而是在辅助线程中调用:

  

在任意队列上调用完成处理程序。建议您在此完成处理程序中使用CNContactStore实例方法,而不要使用UI主线程。

因此,如果您在此处执行一些UI任务,则必须将这些被调用者再次分派到主线程中。