相对较新的联系人,并使用urlAddresses和电子邮件地址:并希望有人可以指出我正确的方向。
到目前为止有效:
我能够阅读我的地址簿并将organizationName,联系电话号码等提取到我的变量中以供使用。但是,我似乎无法破译urlAddresses:和emailAddresses:并且Apple API引用会向我发送循环。
这里基本上是为我工作的。假设myContact是使用Contacts API从AddressBook中成功提取的联系人记录。以下所有工作:
someStringVariable = myContact.organizationName
someStringVariable = myContact.postalAddress[0].value.street
someStringVariable = myContact.phoneNumbers[0].value.value(forKey: "digits") as! String
现在,尝试将相同的逻辑应用于urlAddresses:和emailAddresses:导致我的程序崩溃。我知道我错过了一些东西,但却无法弄清楚我错过了什么。我试过了:
someStringVariable = myContact.urlAddresses[0].value as String
并且一时兴起,我尝试过这样的事情:
someStringVariable = myContact.urlAddresses[0].value.url as String
someStringVariable = myContact.urlAddresses[0].value.value(forKey: "URL") as! String
我的第一个想法是将value属性存储为NSString,但API引用列出了urlAddresses:as CNLabeledValue,并且更多挖掘显示Label是NSString,但Value属性存储为&# 34;价值类型"。
通过Apple的API参考中的链接尝试查找值类型是什么,我开始使用CNContact,它引导我到urlAddresses:然后转到CNLabledValue。这导致了我的价值:价值类型,点击它让我回到CNContact ......所以我陷入了无限循环:)
有人能为我提供如何将URL作为字符串提取的直接解释吗?我想也许我可以用一个值来做(forKey :)但是我似乎无法找到Key存在的内容,而且我不太确定如何打印出urlAddresses的内容:没有造成崩溃。
我遇到与emailAddresses完全相同的问题:所以我假设我在两者上都犯了同样的错误。
感谢帮助人员!
答案 0 :(得分:0)
好的..所以我找到了解决方案,这是一个完整的菜鸟问题。
我没有为urlAddresses或emailAddresses加载密钥,因此它们不存在。
卫生署!
按如下方式添加了这些键,我的代码现在可以正常工作。
let keysToFetch = [
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
CNContactPostalAddressesKey,
CNContactEmailAddressesKey,
CNContactPhoneNumbersKey,
CNContactUrlAddressesKey] as [Any]
基本上,我正在追尾看错了地方!