4

我正在尝试使用数字构建 iPhone 应用程序查找朋友功能

digitUserID我可以从 Digits获取匹配列表。

现在我正在努力匹配UserIDCNContacts

请指出任何例子来处理这个问题。

作为更新:

do 
{
    try contactStore.enumerateContactsWithFetchRequest(CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactMiddleNameKey, CNContactEmailAddressesKey,CNContactPhoneNumbersKey])) {
        (contact, cursor) -> Void in

        self.results.append(contact)
    }
}
catch{
    print("Handle the error please")
}

以上我已经设法获得所有联系,但我不知道如何将电话号码过滤器传递给此并获得精确的联系匹配CNContact

4

1 回答 1

11

理想情况下,人们会期望predicate完成CNContactFetchRequest这项工作,但是(仍然;啊)只接受用CNContact(例如CNContact predicateForContacts(matchingName:)or定义的谓词的狭窄列表predicateForContacts(withIdentifiers:)。它甚至不接受基于块的NSPredicate.

因此,您必须自己枚举,寻找匹配项,例如

let request = CNContactFetchRequest(keysToFetch: [
    CNContactGivenNameKey as CNKeyDescriptor,
    CNContactFamilyNameKey as CNKeyDescriptor,
    CNContactMiddleNameKey as CNKeyDescriptor,
    CNContactEmailAddressesKey as CNKeyDescriptor,
    CNContactPhoneNumbersKey as CNKeyDescriptor
])

do {
    try contactStore.enumerateContacts(with: request) { contact, stop in
        for phone in contact.phoneNumbers {
            // look at `phone.value.stringValue`, e.g.

            let phoneNumberDigits = String(phone.value.stringValue.characters.filter { String($0).rangeOfCharacter(from: CharacterSet.decimalDigits) != nil })

            if phoneNumberDigits == "8885551212" {
                self.results.append(contact)
                return
            }
        }
    }
} catch let enumerateError {
    print(enumerateError.localizedDescription)
}

关于匹配“数字用户 ID”,我不知道该标识符是什么(它是联系人框架标识符还是 Digits 自己的标识符?)。

于 2016-08-17T20:04:50.073 回答