2015-10-28 41 views
14

Próbuję sformatować nazwę kontaktu za pomocą nowego CNContactFormatter. Wygląda na to, że nie pobrałem wszystkich wymaganych właściwości nazwy kontaktu.Jakie klucze są potrzebne do CNContactFormatter?

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

Czy ktoś wie, które są wymagane? Próbowałem pobierania zwolenników wśród kilku innych, bez powodzenia:

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

Ani CNContactFomatter Class Reference ani fetching method's documentation dać jakąś wskazówkę.

Dzięki!

Odpowiedz

15

Znalazłem to na sesji WWDC 223 (począwszy od slajdu 74) i działało to dla mnie, gdy miałem ten sam problem. Użyj CNContactFormatter.descriptorForRequiredKeysForStyle ... w wywołaniu wyboru kontaktu. Przykład:

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)) 
} 
+0

O człowieku, dziękuję! Działa to jak urok, nawet w połączeniu z dodatkowymi polami. – flohei

+0

Link do powyższego: https://developer.apple.com/videos/play/wwdc2015/223/ – coco