AddressBook 框架的大部分内容在 iOS 9 中已被弃用。在新的 Contacts 框架中文档仅显示如何获取与a匹配的记录NSPredicate
,但是如果我想要怎么办all记录?
其他两个答案都只从容器中加载联系人defaultContainerIdentifier
。在用户拥有多个容器(即都用于存储联系人的 Exchange 和 iCloud 帐户)的情况下,这只会从配置为默认的帐户加载联系人。因此,它不会加载all问题作者要求的联系方式。
您可能想要做的是获取所有容器并迭代它们以从每个容器中提取所有联系人。以下代码片段是我们如何在我们的一个应用程序(Swift 中)中执行此操作的示例:
lazy var contacts: [CNContact] = {
let contactStore = CNContactStore()
let keysToFetch = [
CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName),
CNContactEmailAddressesKey,
CNContactPhoneNumbersKey,
CNContactImageDataAvailableKey,
CNContactThumbnailImageDataKey]
// Get all the containers
var allContainers: [CNContainer] = []
do {
allContainers = try contactStore.containersMatchingPredicate(nil)
} catch {
print("Error fetching containers")
}
var results: [CNContact] = []
// Iterate all containers and append their contacts to our results array
for container in allContainers {
let fetchPredicate = CNContact.predicateForContactsInContainerWithIdentifier(container.identifier)
do {
let containerResults = try contactStore.unifiedContactsMatchingPredicate(fetchPredicate, keysToFetch: keysToFetch)
results.appendContentsOf(containerResults)
} catch {
print("Error fetching results for container")
}
}
return results
}()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)