我正在尝试检索所有联系人并以VCard格式保存它们(swift 4,XCode 9.0)。但CNContactVCardSerialization.data(带:)总是返回nil。这是我的代码:
var contacts = [CNContact]()
let request = CNContactFetchRequest(keysToFetch:[CNContact.descriptorForAllComparatorKeys()])
do {
try contactsStore.enumerateContacts(with: request, usingBlock:
{ (contact:CNContact, result:UnsafeMutablePointer<ObjCBool>) in
self.contacts.append(contact)
})
}
catch {
}
// at this point all contacts are in the "contacts" array.
var data = Data()
do {
try data = CNContactVCardSerialization.data(with: contacts)
}
catch {
print("some error in contacts:" + String(describing: error));
}
print(">>>data:" + String(data.count))
输出:
2017-11-02 XXX [5224:449081]
Exception writing contacts to vCard (data): A property was not
requested when contact was fetched.
2017-11-02 XXX [5224:449362] XPC
connection interrupted
some error in contacts:nilError
>>>data:0
我重复了下面的问题,但没有用。 How to use method dataWithContacts in CNContactVCardSerialization?
我在info.plist
中添加了“隐私 - 通讯录使用说明”答案 0 :(得分:1)
也许您需要提供一些特定的密钥才能获取?
UPD:是的,如果你想获取请求并序列化它们,你必须设置要获取的密钥: keysToFetch:@ [[CNContactVCardSerialization descriptorForRequiredKeys]]
答案 1 :(得分:0)
更改
for node in emplist:
# iterate through all the nodes again and form a logic add the edges
for allnodes in emplist:
if node.getPosition()[0]==allnodes.getPosition()[0]-1 and node.getPosition()[1]==allnodes.getPosition()[1]-1:
y.addEdge(edge(node,allnodes))
if node.getPosition()[0]==allnodes.getPosition()[0]-1 and node.getPosition()[1]==allnodes.getPosition()[1]:
y.addEdge(edge(node,allnodes))
到
let request = CNContactFetchRequest(keysToFetch:[CNContact.descriptorForAllComparatorKeys()])