18

new を使用して連絡先の名前をフォーマットしようとしています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 Class Reference取得メソッドのドキュメントも手がかりを与えません。

ありがとう!

4

2 に答える 2

23

これは WWDC セッション 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 に答える