У меня есть приложение, которое использует адресную книгу. При работе в iOS 6 он запускает этот код, когда пользователь делает что-то, что требует доступа к адресной книге.
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();
}
Это отлично работает: я могу прочитать информацию о контактах, и когда пользователь отказал в доступе, приложение реагирует соответственно.
Однако, если пользователь:
- Разрешает доступ к контактам в приложении,
- Закрывает приложение,
- Переход к настройкам- > Конфиденциальность- > Контакты и отключение доступа к контактам для приложения,
- Запускает приложение,
- Пока приложение работает в фоновом режиме, оно переходит в настройки и позволяет использовать контакт для приложения,
приложение сразу же сбой внутри main()
без информации об исключении или значимой трассировки стека. Я попытался включить "все исключения" и [NSException raise]
точку останова, но это не предоставило мне больше информации.
Авария может быть воспроизведена, даже если приложение не запускает указанный код во время запуска.
Что здесь происходит? Есть ли обратный вызов, на который я должен подписаться?