使用联系人
Working with Contacts
联系人相对较新,在使用 urlAddresses: 和 emailAddresses: 时遇到了困难,希望有人能指出正确的方向。
目前有效的:
我能够读取我的地址簿并将组织名称、联系人 phone 号码等提取到我的变量中以供使用。但是,我似乎无法破译 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
我的第一个想法是值 属性 存储为 NSString,但 API 参考列表 urlAddresses: 作为 CNLabeledValue,进一步挖掘发现 Label 是一个 NSString,但值 属性 存储为 "value type".
通过 Apple 的 API 参考中的链接尝试查找值类型,我从 CNContact 开始,它引导我找到 urlAddresses:,然后转到 CNLabledValue。这让我找到了 Value: Value Type,点击它又回到了 CNContact...所以我陷入了无限循环:)
任何人都可以直接向我解释如何将 URL 提取为字符串吗?我想也许我可以用一个 value(forKey:) 来做到这一点,但我似乎无法找到如果它们存在的话 Keys 会是什么,而且我不太确定如何打印出 urlAddresses: 的内容而不会导致崩溃。
我在使用 emailAddresses 时遇到了完全相同的问题:所以我假设我在这两个问题上都犯了同样的错误。
感谢大家的帮助!
好的..所以我找到了解决方案,这是一个完全的菜鸟问题。
我没有加载 urlAddresses 或 emailAddresses 的密钥,所以它们不存在。
呸!
按如下方式添加了这些键,我的代码现在可以正常工作了。
let keysToFetch = [
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
CNContactPostalAddressesKey,
CNContactEmailAddressesKey,
CNContactPhoneNumbersKey,
CNContactUrlAddressesKey] as [Any]
基本上,我追着尾巴找错地方了!
联系人相对较新,在使用 urlAddresses: 和 emailAddresses: 时遇到了困难,希望有人能指出正确的方向。
目前有效的:
我能够读取我的地址簿并将组织名称、联系人 phone 号码等提取到我的变量中以供使用。但是,我似乎无法破译 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
我的第一个想法是值 属性 存储为 NSString,但 API 参考列表 urlAddresses: 作为 CNLabeledValue,进一步挖掘发现 Label 是一个 NSString,但值 属性 存储为 "value type".
通过 Apple 的 API 参考中的链接尝试查找值类型,我从 CNContact 开始,它引导我找到 urlAddresses:,然后转到 CNLabledValue。这让我找到了 Value: Value Type,点击它又回到了 CNContact...所以我陷入了无限循环:)
任何人都可以直接向我解释如何将 URL 提取为字符串吗?我想也许我可以用一个 value(forKey:) 来做到这一点,但我似乎无法找到如果它们存在的话 Keys 会是什么,而且我不太确定如何打印出 urlAddresses: 的内容而不会导致崩溃。
我在使用 emailAddresses 时遇到了完全相同的问题:所以我假设我在这两个问题上都犯了同样的错误。
感谢大家的帮助!
好的..所以我找到了解决方案,这是一个完全的菜鸟问题。
我没有加载 urlAddresses 或 emailAddresses 的密钥,所以它们不存在。
呸!
按如下方式添加了这些键,我的代码现在可以正常工作了。
let keysToFetch = [
CNContactFormatter.descriptorForRequiredKeys(for: .fullName),
CNContactPostalAddressesKey,
CNContactEmailAddressesKey,
CNContactPhoneNumbersKey,
CNContactUrlAddressesKey] as [Any]
基本上,我追着尾巴找错地方了!