14

मैं नए CNContactFormatter का उपयोग कर संपर्क के नाम को प्रारूपित करने का प्रयास कर रहा हूं। ऐसा लगता है, मैंने संपर्क के सभी आवश्यक नाम गुण नहीं लाए।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 है और न ही किसी भी fetching method's documentation सुराग दे: मैं कोई भाग्य के साथ कुछ अन्य लोगों के बीच निम्नलिखित प्राप्त करने में कठिनाई की कोशिश की।

धन्यवाद!

उत्तर

15

मुझे यह डब्ल्यूडब्ल्यूडीसी सत्र 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)) 
} 
+0

ओह आदमी, धन्यवाद! यह एक आकर्षण की तरह काम करता है, यहां तक ​​कि कुछ अतिरिक्त क्षेत्रों के साथ संयुक्त। – flohei

+0

उपरोक्त के लिए लिंक: https://developer.apple.com/videos/play/wwdc2015/223/ – coco

2
class func descriptorForRequiredKeys() 

उपयोग सभी संपर्क एक संपर्क में आने से vCard डेटा बनाने के लिए आवश्यक कुंजी लाने के लिए।

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

उदाहरण:

let containerResults = try contactStore.unifiedContacts(matching: fetchPredicate, keysToFetch:[CNContactVCardSerialization.descriptorForRequiredKeys()]) 
संबंधित मुद्दे

 संबंधित मुद्दे