2016-12-24 35 views
3

所以我有這個代碼工作正常,但只有在predicateForContacts參數中指定了一個名稱。如何使用CNContact.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) 
     } 
} 

我想檢索地址簿上列出的所有人的姓名。

+2

閱讀文檔! https://developer.apple.com/reference/contacts/cncontactstore/1403266-unifiedcontacts請注意以下句子:「要獲取所有聯繫人...」 – matt

回答

10

我想檢索地址簿中列出的所有人的姓名。

形成一個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 
    } 
相關問題