如何使用CNContact.predicateForContacts检索所有联系人?

Chr*_*sen 4 swift cncontact cncontactstore swift3

所以我有这个代码工作正常,但只有你在predicateForContacts参数中指定了一个名称.

func retrieveContactsWithStore(store: CNContactStore) {
    do {
           let predicate = CNContact.predicateForContacts(matchingName: "John")
           let keysToFetch = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName), CNContactPhoneNumbersKey] as [Any]

           let contacts = try store.unifiedContacts(matching: predicate, keysToFetch: keysToFetch as! [CNKeyDescriptor])
           self.objects = contacts
           DispatchQueue.main.async(execute: { () -> Void in
               self.myTableView.reloadData()
           })
       } catch {
           print(error)
       }
}
Run Code Online (Sandbox Code Playgroud)

我想检索地址簿上列出的所有人的姓名.

mat*_*att 12

我想检索地址簿上列出的所有人的姓名.

形成CNContactFetchRequest,指定您想要的键是名称和调用enumerateContacts(with:usingBlock:).

    let req = CNContactFetchRequest(keysToFetch: [
        CNContactFamilyNameKey as CNKeyDescriptor,
        CNContactGivenNameKey as CNKeyDescriptor
    ])
    try! CNContactStore().enumerateContacts(with: req) {
        contact, stop in
        print(contact) // in real life, probably populate an array
    }
Run Code Online (Sandbox Code Playgroud)