2015-10-28 35 views
14

Sto provando a formattare il nome di un contatto utilizzando il nuovo CNContactFormatter. Sembra che non abbia recuperato tutte le proprietà del nome necessarie per il contatto.Quali chiavi sono necessarie per CNContactFormatter?

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

Qualcuno sa quali sono richiesti? Ho provato il recupero di seguito, tra pochi altri senza fortuna:

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

Né il CNContactFomatter Class Reference né il fetching method's documentation dare alcun indizio.

Grazie!

risposta

15

Ho trovato questo nella sessione WWDC 223 (a partire dalla diapositiva 74) e questo ha funzionato per me quando stavo avendo lo stesso problema. Usa CNContactFormatter.descriptorForRequiredKeysForStyle ... nella chiamata di selezione del contatto. Esempio:

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

Oh uomo, grazie! Funziona come un fascino, anche combinato con alcuni campi aggiuntivi. – flohei

+0

Link per sopra: https://developer.apple.com/videos/play/wwdc2015/223/ – coco