Ale*_*nov 46 cocoa-touch abaddressbook ios ios6
我有一个使用地址簿的应用程序.在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();
}
Run Code Online (Sandbox Code Playgroud)
这非常有效:我能够阅读联系人信息,当用户拒绝访问时,应用程序会做出相应的反应.
但是,如果用户:
应用程序立即崩溃main(),没有异常信息或有意义的堆栈跟踪.我尝试打开"所有异常"和[NSException raise]断点,但这并没有给我任何更多信息.
即使应用程序在启动期间未运行上述代码,也可以重现崩溃.
这里发生了什么事?我应该订阅回调吗?
rma*_*ddy 76
我在自己的应用程序中看到过这个.而且我也看到其他人也报道了这一点.我很确定这是故意的行为.操作系统会杀死任何对隐私权限更改做出反应的后台应用程序.Apple似乎采用了大锤方法.这不是崩溃(尽管在调试器中运行时可能会出现这种情况).应用因各种其他原因而被终止.将其添加到原因列表中.这使我们有更多的理由在完全重启我们的应用程序后恢复应用程序状态.
请注意,此行为适用于所有各种隐私设置,如联系人,照片,麦克风,日历和相机.