Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS已停止向用户请求照片库权限_Ios_Objective C_Alassetslibrary - Fatal编程技术网

iOS已停止向用户请求照片库权限

iOS已停止向用户请求照片库权限,ios,objective-c,alassetslibrary,Ios,Objective C,Alassetslibrary,iOS不再向用户请求照片库权限。即使我从设备中删除了应用程序。这也发生在模拟器上 switch ([ALAssetsLibrary authorizationStatus]) { case ALAuthorizationStatusAuthorized: RPMLog(@"authorized"); break; case ALAuthorizationStatusDenied: RPMLog(@"denied");

iOS不再向用户请求照片库权限。即使我从设备中删除了应用程序。这也发生在模拟器上

switch ([ALAssetsLibrary authorizationStatus])
{
    case ALAuthorizationStatusAuthorized:
        RPMLog(@"authorized");
        break;
    case ALAuthorizationStatusDenied:
        RPMLog(@"denied");
        break;
    case ALAuthorizationStatusNotDetermined:
        RPMLog(@"not determined");
        break;
    case ALAuthorizationStatusRestricted:
        RPMLog(@"restricted");
        break;
}
我第一次安装应用程序时已经获得授权。在此之前,没有其他事件或屏幕要求照片触发用户提示

然后我在SavedPhotos中请求numberOfAssets,并在没有访问提示的情况下获取它:

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

    if (!group) return;

    UIActionSheet *actionSheet = nil;
    if (([group numberOfAssets] > 0))
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Use last photo taken", nil), NSLocalizedString(@"Choose existing", nil), nil];
    }
    else
    {
        actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Choose existing", nil), nil];
    }

    actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
    [actionSheet showFromTabBar:self.tabBar];
    [TestFlight passCheckpoint:@"New Look: Tab Bar"];

} failureBlock:^(NSError *error) {

    NSAssert(!error, [error description]);
}];

发生的情况是,iOS正在保存映射到捆绑包ID的应用程序的权限,如果该应用程序被删除,此数据将持续24小时,这样可以避免在用户重新安装应用程序时(可能是在错误删除应用程序后)重新提示用户

推送通知提示也会发生这种情况

作为解决办法,我引用苹果关于推送通知的话:

在iOS上重置推送通知权限警报

第一 当启用推送功能的应用程序注册推送通知时,iOS会询问 用户,如果他们希望接收该应用程序的通知。一旦用户 已响应此警报,除非 设备已还原或应用程序已卸载至少一天

如果你想模拟应用程序的首次运行,你可以离开 该应用卸载了一天您可以实现后者而无需 通过将系统时钟向前拨一天或几天,实际等待一天 更重要的是,完全关闭设备,然后再将设备返回 在


来源:

因为问题是关于照片库权限的,所以在不更改系统时钟和关闭设备的情况下,还有其他方法

你可以直接进入“设置”应用程序

(常规>重置>重置位置和隐私)


这将使应用程序再次请求照片库、位置和其他权限。

您只需遵循以下要点,无需重新安装或删除应用程序

  • 应用程序从后台删除
  • 进入设置->常规->重置->单击重置位置和隐私

希望您能得到帮助。

通过设置应用程序进行REST很难实现自动化。我们使用
simctl
以自动方式重置模拟器内容和设置,以重置权限对话框。这将需要在模拟器中重新安装应用程序,但同样地,
simctl
可以完成此操作。

如果您正在使用iOS模拟器,则使用模拟器/重置内容和设置重置它…似乎会重置此设置。当然,您需要将应用程序重新安装到它上。

您可以通过两种类型检查此权限-

  • 在模拟器中
    您可以执行模拟/重置内容和设置
  • 物理设备(iPhone、iPad)
    您可以更改日期,至少差异应为24小时

但首先从设备上卸载应用程序,然后重新启动,然后应用该程序,然后它就会工作。

这可能是因为iOS会在24小时内记住这些设置-我在删除我正在测试推送通知的应用程序时也经历过同样的情况。如果您将系统时钟覆盖一天,然后重新启动,您可能会返回弹出窗口。我尝试了提前2天(然后是前2天)设置设备时钟,重置设备并进行干净的安装,但未成功-仍然未请求许可。您需要重置隐私设置。运行设置应用程序并转到常规,然后重置。点击“重置位置和隐私”。不过,这会重置所有隐私设置。你是对的,我在模拟器上这样做了,但没有成功,但在它工作的设备上。这在iOS 10中不再是一个问题。一旦删除应用程序,它就会忘记照片、相机等的设置。这对我来说很有效,我需要重置访问照片库的权限,这是一个快速的解决方案。当然,这意味着必须确认我为其他应用程序所做的选择,但它确实有效。比给定的解决方案好得多,无论何时你想测试,都需要大约3分钟的时间。第二个最佳答案的副本。如果您想添加有关从后台删除应用程序的信息,请编辑@jcesarmobile原始答案。这太令人讨厌了……我喜欢它。