Catch 22 selon la documentation pour l'utilisation du carnet d'adresses avec iOS 6

Selon la documentation avec iOS6, un carnet d'adresses doit être créé en utilisant ABAddressBookCreateWithOptions.

Il dit aussi que si l'appelant n'a pas access à la database, cette méthode renverra null.

Cependant, l'access est demandé en appelant ABAddressBookRequestAccessWithCompletion, ce qui prend un ABAddressBookRef en paramètre.

Donc, selon la documentation, vous ne pouvez pas get un ABAddressBookRef en premier lieu si vous n'avez pas access, mais pour avoir access, vous devez avoir un ABAddressBookRef à passer en paramètre.

Eh. Catch 22? Comment créer un ABAddressBookRef alors?

Été googling pour un exemple / code tutoriel pour cela, mais n'en ai pas trouvé.

TIA

J'utilise du code comme ceci:

if (ABAddressBookCreateWithOptions) { _book = ABAddressBookCreateWithOptions(NULL, NULL); if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { ABAddressBookRequestAccessWithCompletion(_book, ^(bool granted, CFErrorRef error) { dispatch_async(dispatch_get_main_queue(), ^{ if (granted && !error) { ABAddressBookRevert(_book); } }); }); } } else { _book = ABAddressBookCreate(); } 

_book est mon ABAddressBookRef.

Si mon application a été refusée, _book sera NULL et vous ne pourrez pas accéder au carnet d'adresses.

Voir ma réponse ici:

https://stackoverflow.com/a/13671852/341994

ABAddressBookRequestAccessWithCompletion est inutile et devrait être ignoré.

  • Si vous avez besoin de connaître le statut d'autorisation, appelez ABAddressBookGetAuthorizationStatus .

  • Si l'autorisation est indéterminée (l'user n'a jamais exécuté cette application), essayez simplement d'accéder à la database. Cela entraînera l'apparition de l'alerte d'autorisation.

  • Si l'user a autorisé ou refusé l'access, ABAddressBookRequestAccessWithCompletion n'a aucune valeur, il est donc inutile de l'appeler.