【问题标题】:Detect when user tapped Don't Allow when making changes to photo library在更改照片库时检测用户何时点击不允许
【发布时间】:2016-07-10 02:33:35
【问题描述】:

当您想要更改 PHAsset 时,请将其包装在 performChanges 块中。您在完成块中获得成功 Bool 和错误 NSError。现在我想在请求失败的情况下向用户显示警报。这就是诀窍:

PHPhotoLibrary.sharedPhotoLibrary().performChanges({ () -> Void in
    let request = PHAssetChangeRequest(forAsset: asset)
    request.creationDate = date
}, completionHandler: { (success: Bool, error: NSError?) -> Void in
    dispatch_async(dispatch_get_main_queue()) {
        if let error = error {
            //present alert
        }
    }
})

问题是当用户点击不允许时,它也会显示警报。我不想这样做,用户故意取消了它,所以没有必要通知他们它失败了​​。但是我怎样才能检测到发生了什么?错误userInfonil,它似乎没有提供任何有用的信息来检测这种情况。我错过了什么吗?

【问题讨论】:

  • 尝试查看错误代码。可能有一个特定代码用于指示用户拒绝访问。
  • @rmaddy 谢谢,error.code-1,这似乎是一般错误 The operation couldn’t be completed. (Cocoa error -1.)

标签: ios phasset phphotolibrary


【解决方案1】:

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

 NSLog(@"%ld",(long)status);

switch (status) {

    case PHAuthorizationStatusAuthorized:

        // code for display photos


          NSLog(@"ffefwfwfwef");

    case PHAuthorizationStatusRestricted:



        break;
    case PHAuthorizationStatusDenied:

       //code for Dont Allow code

        break;
    default:
        break;
}

}];

【讨论】:

  • PHAuthorizationStatus 不同。授权状态与照片内容编辑的审批无关。
【解决方案2】:

现在可以通过检查error 是否为PHPhotosError,如果是,请检查其code 以查看它是否为.userCancelled

PHPhotoLibrary.shared().performChanges({
    let request = PHAssetChangeRequest(forAsset: asset)
    request.creationDate = date
}) { success, error in
    guard let error = error else { return }
    guard (error as? PHPhotosError)?.code != .userCancelled else { return }
    
    DispatchQueue.main.async {
        //present alert
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多