2015-09-19 24 views
8

W najnowszej strukturze Kontakty dla iOS9, jak odzyskać tylko CNContact z prawidłowym adresem e-mail?Swift iOS9 New Contacts Framework - Jak odzyskać tylko CNContact z prawidłowym adresem e-mail?

Aktualny kod:

func getContacts() -> [CNContact] { 
    let contactStore = CNContactStore() 
    let predicate: NSPredicate = NSPredicate(format: "") 
    let keysToFetch = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey] 

    do { 
     return try contactStore.unifiedContactsMatchingPredicate(predicate, keysToFetch: keysToFetch) 
    } catch { 
     return [] 
    } 
} 

Odpowiedz

16

Na razie (iOS 9.0) wydaje się, że nie ma predykaty (see CNContact Predicates) są dostępne filtrować kontakty według adresu e-mail!

Nie możesz napisać niestandardowy orzecznik filtrować kontakty, jak mówi doc: „Należy pamiętać, że ogólne i złożone predykaty nie są obsługiwane przez ramy Kontakty”

Ale oczywiście można to zrobić "ręcznie", pokażę przykład z użyciem szybkiego wyliczenia:

let contactStore = CNContactStore() 
fetchRequest.unifyResults = true //True should be the default option 
do { 
    try contactStore.enumerateContactsWithFetchRequest(CNContactFetchRequest(keysToFetch: [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey])) { 
     (contact, cursor) -> Void in 
     if (!contact.emailAddresses.isEmpty){ 
      //Add to your array 
     } 
    } 
} 
catch{ 
    print("Handle the error please") 
} 
+1

Świetnie, dziękuję! –

+0

W jaki sposób używałbyś tego z CNContactPickerViewController? Czy to możliwe? A może musisz utworzyć nowy kontroler widoku, aby wybrać swoje kontakty? –

+0

Możesz spojrzeć na metodę: predicateForEnablingContact of CNContactPickerViewController – andreacipriani