iOS 9 - 获取的联系人返回空电话号码

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)