您真的需要在应用程序中存储此列表的副本吗?我怀疑出于安全原因,这也应该是必要的。作为用户,我对我的联系人列表被镜像到应用程序没有很好的感觉。
不是只有当用户打开联系人列表或想写新消息时才需要这个列表吗?您可以使用以下技术
- 列表视图的分页,即仅加载 20 个联系人并在用户滚动时加载更多
- 用于在用户类型时加载联系人的谓词:
CNContact.predicateForContacts(matchingName: "Appleseed")
- 联系人框架有一个很好的 API 来获取部分联系人数据。有些数据比其他数据更耗时。仅获取您真正需要的内容:
let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey] as [CNKeyDescriptor]
仅获取包含部分数据的联系人
let store = CNContactStore()
do {
let predicate = CNContact.predicateForContacts(matchingName: "Appleseed")
let contacts = try store.unifiedContacts(matching: predicate, keysToFetch: keysToFetch)
print("Fetched contacts: \(contacts)")
} catch {
print("Failed to fetch contact, error: \(error)")
// Handle the error
}
您可以在官方文档中阅读更多相关信息