如何在CNContactVCardSerialization中使用方法dataWithContacts?

我正在尝试使用联系人的vCard表示获取NSData对象。 我的代码:

let contactStore = CNContactStore() let fetchRequest = CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactFamilyNameKey]) var contacts = [CNContact]() var vcard = NSData() do{ try contactStore.enumerateContactsWithFetchRequest(fetchRequest) { (contact, status) -> Void in self.fetchRequest.unifyResults = true self.contacts.append(contact)} } catch { print("Error \(error)") } do { try vcard = CNContactVCardSerialization.dataWithContacts(contacts) } catch { print("Error \(error)") } 

但是,我得到错误:

将联系人写入vCard(数据)的exception:获取联系人时未请求属性。 错误NilError。

我理解访问联系人的错误,但如何修复呢?

我找到了解决方案,它的工作原理:

 let contactStore = CNContactStore() var contacts = [CNContact]() var vcardFromContacts = NSData() let fetchRequest = CNContactFetchRequest(keysToFetch:[CNContactVCardSerialization.descriptorForRequiredKeys()]) do{ try contactStore.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { contact, cursor in self.contacts.append(contact)}) } catch { print("Get contacts \(error)") } // Returns the vCard representation of the specified contacts do { try vcardFromContacts = CNContactVCardSerialization.dataWithContacts(contacts) } catch { print("vcardFromContacts \(error)") } 

但是,我从vCard数据返回联系人:

 do { try contactsFromVcard = CNContactVCardSerialization.contactsWithData(vcardFromContacts) } catch { print("contactsFromVcard \(error)") } 

field contact imageData没有。 虽然不是零。