【问题标题】:Working with Contacts使用联系人
【发布时间】: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 键......

标签: swift cocoa contacts


【解决方案1】:

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

我没有加载 urlAddresses 或 emailAddresses 的密钥,所以它们不存在。

哇!

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

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

基本上,我是在追尾找错地方了!

【讨论】:

    猜你喜欢
    • 2011-10-09
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多