func getContacts() {
let store = CNContactStore()
if CNContactStore.authorizationStatus(for: .contacts) == .notDetermined {
store.requestAccess(for: .contacts, completionHandler: { (authorized: Bool, error: NSError?) -> Void in
if authorized {
self.retrieveContactsWithStore(store: store)
}
} as! (Bool, Error?) -> Void)
} else if CNContactStore.authorizationStatus(for: .contacts) == .authorized {
self.retrieveContactsWithStore(store: store)
}
}
func retrieveContactsWithStore(store: CNContactStore) {
do {
let groups = try store.groups(matching: nil)
let predicate = CNContact.predicateForContactsInGroup(withIdentifier: groups[0].identifier)
//let predicate = CNContact.predicateForContactsMatchingName("John")
let keysToFetch = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName), CNContactEmailAddressesKey] 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)
}
}
J'essayais de récupérer les contacts du carnet d'adresses, mais chaque fois que je me rendais à la vue appelant getContacts(), l'application se figeait. Ça ne marcherait plus, mais ça ne s'est pas écrasé non plus. Je me demande ce qui a mal tourné ici?L'application se bloque lors de la demande d'accès au carnet d'adresses
ce code a une erreur sur le statut d'autre ==. Partie autorisée, il dit "fixer l'insérer", "" –
Oups. J'ai plus édité. Ajoutez un 'if' là-dedans. Voir la mise à jour. – rmaddy
Et une autre faute de frappe - raté la parenthèse fermante. – rmaddy