我正在使用该代码在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)=
答案 0 :(得分:2)
我想问题是您在store.requestAccess
的完成处理程序中进行了一些UI更新。
根据Apple的文档,处理程序不是在主(UI)线程中调用,而是在辅助线程中调用:
在任意队列上调用完成处理程序。建议您在此完成处理程序中使用CNContactStore实例方法,而不要使用UI主线程。
因此,如果您在此处执行一些UI任务,则必须将这些被调用者再次分派到主线程中。