我有一个使用通讯簿的应用程序。在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]断点,但这并没有给我更多信息。即使该应用在启动过程中未运行上述代码,也可以重现崩溃。这里发生了什么事?我应该订阅一个回调吗?
3 回答
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
我已经在自己的应用程序中看到了这一点。我也看到其他人也报告了这一点。我很确定这是故意的行为。该操作系统会杀死对隐私权限更改有反应的所有后台应用程序。苹果似乎对此采取了大锤的态度。这不是崩溃(尽管在调试器中运行时可能会出现)。应用因其他各种原因而终止。将此添加到原因列表中。这使我们有更多理由在完全重启应用程序后做好恢复应用程序状态的工作。
请注意,此行为适用于所有各种隐私设置,例如联系人,照片,麦克风,日历和相机。
九州编程
TA贡献1785条经验 获得超4个赞
通常,当应用程序从挂起状态恢复时,应从AppDelegate调用application:didEnterForeground。我认为,这将是您重新调整通讯簿权限的好地方。
浮云间
TA贡献1829条经验 获得超4个赞
在与iOS 7日历相关的应用中的工作原理相同。如果您在设备上运行应用程序,而不是通过Xcode调试或模拟器运行,则会看到该应用程序重新启动,用户看不到。因此,正如rmaddy所说,只要确保您的应用程序“在完全重启后就可以很好地恢复应用程序状态……”
- 3 回答
- 0 关注
- 435 浏览
添加回答
举报
0/150
提交
取消