美文网首页iOS开发
PhotoKit崩溃问题,This application is

PhotoKit崩溃问题,This application is

作者: _森宇_ | 来源:发表于2019-05-07 17:02 被阅读4次

    问题描述

    系统要求:无
    设备要求:无
    问题详情:用户禁止应用访问相册,但应用仍然调用了-[PHImageManager defaultManager]方法,当应用出现内存警告时,就会崩溃。

    崩溃信息

    这个问题的崩溃日志:


    crash log

    问题关键信息:

    This application is not allowed to access Photo data.
    

    复现方法

    1.创建一个新工程,添加相册读取权限Privacy - Photo Library Usage Description
    2.在ViewDidLoad的时候调用 -[PHImageManager defaultManager]

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        
        [PHImageManager defaultManager];
    }
    
    1. 运行工程,在申请相册访问权限时点 Don't Allow
    2. 模拟内存警告,工具栏点 Debug -> Simulate Memory Warning,就会崩溃。
      Memory warning

    原因分析

    PHImageManager在初始化的时候添加DISPATCH_SOURCE_TYPE_MEMORYPRESSURE事件通知,当内存不够的时候会尝试移除缓存。PHImageManager 是一个懒加载的对象,你如果曾经调用过 -[PHImageManager defaultManager] 隐式初始化,而且没获得相册权限,就会导致 crash。

    解决方案

    读取相册前先判断相册权限:

    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    switch (status) {
        case PHAuthorizationStatusAuthorized:
            // 可以读取相册
            break;
            
        case PHAuthorizationStatusNotDetermined:
            // 执行获取权限操作
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                if (status == PHAuthorizationStatusAuthorized) {
                    // 可以读取相册
                } else {
                    // 提示在设置中打开相册访问权限
                }
            }];
            break;
            
        case PHAuthorizationStatusDenied:
            // 提示在设置中打开相册访问权限
            break;
            
        case PHAuthorizationStatusRestricted:
            // 提示访问相册受到限制,比如家长控制
            break;
            
        default:
            break;
    }
    

    确保拥有相册权限才读取相册图片,尤其是调用-[PHImageManager defaultManager]

    另外打开设置中当前应用设置的方法如下:

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
    

    相关文章

      网友评论

        本文标题:PhotoKit崩溃问题,This application is

        本文链接:https://www.haomeiwen.com/subject/sgcyoqtx.html