使用联系人

时间:2017-03-28 18:22:45

标签: swift cocoa contacts

相对较新的联系人,并使用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完全相同的问题:所以我假设我在两者上都犯了同样的错误。

感谢帮助人员!

1 个答案:

答案 0 :(得分:0)

好的..所以我找到了解决方案,这是一个完整的菜鸟问题。

我没有为urlAddresses或emailAddresses加载密钥,因此它们不存在。

卫生署!

按如下方式添加了这些键,我的代码现在可以正常工作。

let keysToFetch = [
                CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
                CNContactPostalAddressesKey,
                CNContactEmailAddressesKey,
                CNContactPhoneNumbersKey,
                CNContactUrlAddressesKey] as [Any]

基本上,我正在追尾看错了地方!