【发布时间】:2017-03-29 02:41:03
【问题描述】:
对联系人比较陌生,并且在使用 urlAddresses: 和 emailAddresses: 时遇到了困难,希望有人能指出我正确的方向。
目前有效:
我能够阅读我的通讯录并将组织名称、联系电话号码等提取到我的变量中以供使用。但是,我似乎无法破译 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: 列为 CNLabeledValue,再深入一点发现 Label 是 NSString,但 Value 属性存储为“值”类型”。
通过 Apple 的 API 参考中的链接尝试查找值类型是什么,我从 CNContact 开始,这导致我找到 urlAddresses:,然后是 CNLabledValue。这导致我进入 Value: Value Type,然后单击它让我回到 CNContact ......所以我陷入了无限循环:)
谁能给我一个直截了当的解释,说明如何将 URL 提取为字符串?我想也许我可以用一个 value(forKey:) 来做到这一点,但如果它们存在,我似乎无法找到键是什么,而且我不太确定如何打印出 urlAddresses: 的内容而不会导致崩溃。
我在使用 emailAddresses 时遇到了完全相同的问题:所以我假设我在两者上都犯了同样的错误。
感谢大家的帮助!
【问题讨论】:
-
您看到的实际错误或崩溃是什么?
-
您应该能够访问
myContact.urlAddresses.first?.value,它应该已经输入为NSString。你确定崩溃不是因为urlAddresses是空的吗?在这种情况下访问 [0] 会导致崩溃 -
是的......这正是发生的事情......因为我没有获取 urlAddress 或 emailAddress 键......