Sir*_*b33 5 ios swift ios9 cncontact cncontactstore
知道为什么有些人CNContacts回来时电话号码是空的吗?
我不断得到这样的输出:
"phoneNumbers=(not fetched), emailAddresses=(not fetched),"
Run Code Online (Sandbox Code Playgroud)
例如,当我从模拟器的内置联系人应用程序中获取联系人时,我会得到混合结果:
"John Appleseed" 确实返回了电话号码,但"Kate Bell"没有返回- 尽管她显然有电话号码。这很奇怪,因为我肯定CNContactPhoneNumbersKey在我的获取请求中使用。
这是我的代码:
let fetchKeys = [ CNContactEmailAddressesKey, CNContactPhoneNumbersKey,
CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName) ]
let contactFetchRequest = CNContactFetchRequest(keysToFetch: fetchKeys)
do {
try self.contactsStore.enumerateContactsWithFetchRequest(contactFetchRequest) {
fetchedContact, stop in
print("fetched Contact is: \n\(fetchedContact.description)")
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,输出显示有时获取的联系人会返回电话号码,有时则不会。电子邮件也是如此:有时会被退回,有时不会。
这种情况在模拟器中以及当我在 iPhone 上运行时都会发生。
知道这里会发生什么吗?
小智 0
当在联系人应用程序中添加电话号码时,有时会丢失标签(例如“家庭”或“电话”...)如果标签为空,则不会显示号码。解决方法是为缺失的标签显式设置默认标签。一个简单的例子:
for phoneNumber in contact.phoneNumbers {
guard let phone = phoneNumber.value as? CNPhoneNumber
else { continue }
let phoneLabel = phoneNumber.label == nil ? "DefaultLabel" : phoneNumber.label!
phoneNumbers.append((phone.stringValue,phoneLabel))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1153 次 |
| 最近记录: |