已将iOS联系人获取到表视图,但表视图数据不会显示,直到我单击另一个选项卡栏项目并返回到表视图选项卡



这个函数是在我的"viewDidLoad(("中调用的。我能够成功检索所有联系人,尽管数据不会显示,直到我单击另一个选项卡栏项目,然后返回到表视图选项卡栏项目。这是我的密码。。

func getContacts()
{
print("Attempting to fetch Contacts")
let store = CNContactStore()
store.requestAccess(for: .contacts) { (granted, err) in
if let err = err {
print("failed to request Access", err)
return
}
if granted {
print("access granted")
let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey]
let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
request.sortOrder = CNContactSortOrder.userDefault
do {
var contactNames = [ContactNames]()
try store.enumerateContacts(with: request, usingBlock: {(contact, stopPointerIfYouWantToStopEnumerating) in
contactNames.append(ContactNames(contact: contact))
})
self.contactsArray = contactNames

}catch let err {
print("Failed to enumerate contacts", err)
}

} else{
print("access denied")
}
}
}

在第一次填充表视图时,您的数据不会被加载。当您使用选项卡导航时,它会起作用,因为数据已在返回到表视图选项卡时加载,这会强制重新加载表视图。

假设您的表视图数据源使用self.contactsArray,您只需要在将数据分配给self.contactsArray后调用tableview.reloadData()

一定要在主线程上执行此操作。

self.contactArray = contactNames
DispatchQueue.main.async {
self.tableView.reloadData()
}

相关内容

  • 没有找到相关文章

最新更新