18

我正在尝试使用新的CNContactFormatter. 看起来,我没有获取联系人的所有需要​​的名称属性。

Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.'

有谁知道需要哪些?我尝试在其他几个没有运气的情况下获取以下内容:

        CNContactNamePrefixKey,
        CNContactGivenNameKey,
        CNContactFamilyNameKey,
        CNContactMiddleNameKey, 
        CNContactPreviousFamilyNameKey,
        CNContactNameSuffixKey,
        CNContactNicknameKey,
        CNContactPhoneticGivenNameKey,
        CNContactPhoneticMiddleNameKey,
        CNContactPhoneticFamilyNameKey,
        CNContactOrganizationNameKey,
        CNContactDepartmentNameKey,
        CNContactJobTitleKey,

CNContactFomatter类参考获取方法的文档都没有提供任何线索。

谢谢!

4

2 回答 2

23

我在 WWDC Session 223 中发现了这一点(从幻灯片 74 开始),当我遇到同样的问题时,这对我有用。在联系人选择调用中使用 CNContactFormatter.descriptorForRequiredKeysForStyle...。例子:

let contactStore = CNContactStore()
let predicate = CNContact.predicateForContactsMatchingName("John")
let foundContacts = try contactStore.unifiedContactsMatchingPredicate(predicate, keysToFetch: [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName)]
for contact in foundContacts {
            print(CNContactFormatter.stringFromContact(contact, style: .FullName))
}
于 2015-11-01T04:08:57.837 回答
1
class func descriptorForRequiredKeys()

用于获取从联系人创建 vCard 数据所需的所有联系人密钥。

https://developer.apple.com/reference/contacts/cncontactvcardserialization

例子:

let containerResults =  try contactStore.unifiedContacts(matching: fetchPredicate, keysToFetch:[CNContactVCardSerialization.descriptorForRequiredKeys()])
于 2016-09-15T13:58:57.907 回答