2015-09-19 11 views
8

Nell'ultimo framework Contatti per iOS9, come recuperare solo CNContact con un indirizzo email valido?Swift iOS9 Nuovo quadro contatti - Come recuperare solo CNContact con un indirizzo email valido?

codice attuale:

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 [] 
    } 
} 

risposta

16

Per ora (iOS 9.0) sembra che non predicati (see CNContact Predicates) sono disponibili per filtrare i contatti per indirizzo e-mail!

Non è possibile scrivere un predicato personalizzato per filtrare i contatti, come il dottore dice: "Si noti che predicati generici e composti non sono supportati dal framework Contatti"

Ma naturalmente è possibile farlo "manualmente", ti mostro un esempio usando l'enumerazione veloce:

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

eccellente, grazie! –

+0

Come utilizzeresti questo con un CNContactPickerViewController? È possibile? O dovresti creare un nuovo controller di visualizzazione per selezionare i tuoi contatti? –

+0

Puoi osservare il metodo: predicateForEnablingContact di CNContactPickerViewController – andreacipriani