我有一个应用程序使用地址簿。在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]
断点,但这并没有给我更多信息。
即使应用程序在启动期间没有运行上述代码,也可以重现崩溃。
这里发生了什么?我应该订阅哪个回调函数?