用户更改联系人访问权限时,iOS 6中的应用程序崩溃

2020/12/11 15:52 · ios ·  · 0评论

我有一个使用通讯簿的应用程序。在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();
}

这非常正常:我能够读取联系人信息,并且当用户拒绝访问时,应用程序会做出相应的反应。

但是,如果用户:

  1. 允许联系人在应用中访问,
  2. 退出该应用,
  3. 转到“设置”->“隐私”->“联系人”,并禁用该应用的“联系人”访问权限,
  4. 运行该应用,
  5. 当应用在后台运行时,进入设置并启用该应用的“联系人”访问权限,

该应用程序立即崩溃main(),没有异常信息或有意义的堆栈跟踪。我尝试打开“所有异常”和[NSException raise]断点,但这并没有给我更多信息。

即使该应用在启动过程中未运行上述代码,也可以重现崩溃。

这里发生了什么事?是否有我应该订阅的回调?

我已经在自己的应用程序中看到了这一点。我也看到其他人也报告了这一点。我很确定这是故意的行为。该操作系统会杀死对隐私权限更改有反应的所有后台应用程序。苹果似乎对此采取了大锤的态度。这不是崩溃(尽管在调试器中运行时可能会出现)。应用因其他各种原因而终止。将此添加到原因列表中。这使我们有更多理由在完全重启应用程序后做好恢复应用程序状态的工作。

请注意,此行为适用于所有各种隐私设置,例如联系人,照片,麦克风,日历和相机。

通常,当应用程序从挂起状态恢复时,应从AppDelegate调用application:didEnterForeground。我认为,这将是您重新调整通讯簿权限的好地方。

本文地址:http://ios.askforanswer.com/yonghugenggailianxirenfangwenquanxianshiios-6zhongdeyingyongchengxubengkui.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!