J'ai une application qui utilise le carnet d'adresses. Sous iOS 6, elle exécute ce code lorsque l'utilisateur fait quelque chose qui nécessite un accès au carnet d'adresses.
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined)
{
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error)
{
if (granted)
{
showContactChooser();
}
});
CFRelease(addressBookRef);
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
showContactChooser();
}
else
{
showAccessDeniedAlert();
}
Cela fonctionne parfaitement : Je suis en mesure de lire les informations sur les contacts et lorsque l'utilisateur refuse l'accès, l'application réagit en conséquence.
Cependant, si l'utilisateur :
- Permet l'accès aux contacts dans l'application,
- Quitte l'application,
- Allez dans Paramètres->Privacy->Contacts et désactivez l'accès aux contacts pour l'application,
- Exécute l'application,
- Pendant que l'application fonctionne en arrière-plan, allez dans les paramètres et activez l'accès au contact pour l'application,
l'application se plante immédiatement à l'intérieur main()
sans information sur les exceptions ni trace de pile significative. J'ai essayé d'activer la fonction "toutes les exceptions" et la fonction [NSException raise]
point d'arrêt, mais cela ne m'a pas donné plus d'informations.
Le crash peut être reproduit même si l'application n'exécute pas le code ci-dessus pendant le lancement.
Qu'est-ce qui se passe ici ? Y a-t-il une fonction de rappel à laquelle je devrais m'abonner ?