我的iOS应用使用ALAssetsLibrary
访问用户的照片。当我更改应用程序的隐私设置(设置→隐私→照片)时,应用程序会被系统(SIGKILL
)杀死。这是一个错误吗?
答案 0 :(得分:33)
我认为这是一个错误或至少记录不良和意外的行为。但它不会崩溃它只是被迫重启。您将收到SIGKILL消息但没有崩溃日志。
如果您是注册苹果开发者,可以查看他们的论坛以了解有关此问题的讨论
我不知道如何防止此行为,但随时可以使用apple提交错误报告。有传言称他们使用bug重复作为衡量bug严重程度的方法。 也许您可以存储您的应用程序状态,以便在重新启动时恢复它。
答案 1 :(得分:10)
使用UIImagePickerController时也会发生这种情况。顺序如下:
显示UIImagePickerController。第一次,小警报要求用户允许使用照片库。假设用户说没有。
此时所有用户可以使用选择器控制器取消,所以让我们假设发生了什么。
稍后,您将展示UIImagePickerController。它现在包含一个不可自定义的消息,表示无法访问照片库,但用户可以在“设置”中启用访问权限。
用户切换到“设置”,可以访问此应用的照片库。
该应用在后台崩溃。用户是否已取消选择器或将其显示无关紧要。
我已经提交了一个错误,我建议你也这样做,因为你的情况。 Apple在iOS 6中引入了一个新的隐私系统,显然还没有解决问题。
答案 2 :(得分:1)
有时SIGKILL错误作为中断错误,它向iOS发出信号,您必须重新启动应用程序,同时我们正在管理应用程序任务,并且在该实例上,应用程序不会处理发送中断消息的方式
在我的情况下.....我不允许在应用程序中访问照片和相机,每当我允许访问这些功能时,我最小化应用程序并启用这些设置。当我启用这些时,iOS会中断并且应用会收到此但无法处理并导致我们的应用终止或关闭。
答案 3 :(得分:1)
当您使用模拟器测试您的应用程序时。更改应用程序的权限会给您一个断点。您可以在控制台中键入“c”以使应用程序继续运行并返回到原始状态。但是在您的真实状态中设备,这不是故事。它只是重新启动应用程序。
答案 4 :(得分:0)
好我第一次写回答。我希望我做对了:)
您是否使用assetForURL访问资产库:resultBlock:failureBlock:?
如果您是,那么很可能您没有处理ALAssetLibrary的失败块。
您可以执行类似
的操作ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Access to Photo Library is Denied "
message:@"Please allow <YOUR APP NAME> to access your Photo library from Privacy Settings"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
因此,当您的应用无法访问照片库时,它会要求用户执行此操作。