iOS电话簿上的唯一标识符不符合预期

时间:2015-12-17 10:05:19

标签: ios swift cncontact

我正在使用从iOS上的电话簿中检索联系人的新版本。唯一标识符存在问题,该标识符由第一个查询返回。通常,唯一标识符是UUID,但有时它附加“:ABPerson”。 使用此标识符查询电话簿API有时会起作用,但并非总是如此。有没有人知道,如果有办法避免这种行为? 目前,我尝试保护两个查询。第一个是按原样使用标识符,第二个(如果第一个失败)是使用剥离“:ABPerson”扩展名的标识符。

使用的第一个查询是:

class func getAllPhoneBookContacts() -> [PhonebookContact] {
    let contactStore = CNContactStore()
    var contacts = [PhonebookContact]()
    PhoneBookContactsHelper.requestForAccess { (accessGranted) -> Void in
        if accessGranted {
            let keys = [CNContactIdentifierKey, CNContactPhoneNumbersKey]

            do {
                let fetchRequest = CNContactFetchRequest(keysToFetch: keys)
                try contactStore.enumerateContactsWithFetchRequest(fetchRequest, usingBlock: { (contact: CNContact, _) -> Void in
                    for phoneNoLab in contact.phoneNumbers {
                        if let phoneNo = phoneNoLab.value as? CNPhoneNumber,
                        normalizedPhoneNumber = PhoneNumberNormalizer.normalizePhoneNumber(phoneNo.stringValue) {
                            let pbc = PhonebookContact(contactID: contact.identifier, phoneNumber: normalizedPhoneNumber)
                            contacts.append(pbc)
                        }
                    }
                })
            }
            catch {
                NSLog("Unable to fetch contacts.")
            }
        }
    }
    return contacts
}

稍后通过标识符再次访问某个联系人:

class func getContactNameByUUID(identifier: String) -> String?{
    var name : String?
    PhoneBookContactsHelper.requestForAccess()
        { (accessGranted) -> Void in
            if accessGranted {
                let contactStore = CNContactStore()
                let keys = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName)]
                do {
                    let cnc = try contactStore.unifiedContactWithIdentifier(identifier, keysToFetch: keys)
                    name = CNContactFormatter.stringFromContact(cnc, style: .FullName)!
                }
                catch _ {
                    NSLog("Could not fetch contact with id \(identifier))")
                }
            }
    }
    return name
}

我正在使用iOS 9并在模拟器和各种iPhone上进行测试,并且到处都出现意外行为。

0 个答案:

没有答案