私はアドレス帳を使用するアプリケーションを持っています。 iOS 6で実行すると、ユーザーがアドレス帳にアクセスする必要がある場合にこのコードが実行されます。ユーザーが連絡先のアクセス許可を変更すると、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();
}
これは完璧に動作します:私は、連絡先の情報を読み取ることができていますし、ユーザーがアクセスを拒否されたときに、アプリはそれに応じて反応します。
ただし、ユーザーの場合:
- が
- はPrivacy->連絡先>設定に行き、
- アプリを終了し、アプリ内の連絡先へのアクセスを許可し、アプリケーションのための連絡先へのアクセスを無効にし、
- アプリがバックグラウンドで実行されている間、アプリ、
- を実行する設定に行き、アプリのための連絡先へのアクセスを可能にし、
アプリはすぐに例外情報や意味のあるスタックトレースなしでmain()
の内部でクラッシュします。私は "すべての例外"と[NSException raise]
ブレークポイントを有効にしようとしましたが、それ以上の情報を私に与えませんでした。
起動時にアプリが上記のコードを実行しなくてもクラッシュを再現することができます。
ここには何が起こっていますか?私が購読するべきコールバックがありますか?
以下のrmaddyの回答ごとに、これはクラッシュではなく、iOSでアプリを終了しています。 –
私にとっても同じ問題ですが、私のアプリのロケーション権限のためです:( –