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