【问题标题】:PHFetchRequest returns nil data mixed with optional data for images?PHFetchRequest 返回零数据与图像的可选数据?
【发布时间】:2021-06-20 14:18:21
【问题描述】:

我正在学习如何使用 PHFetchRequest 从用户的照片库中获取图像,然后在自定义图像选择器的滚动视图中显示它们但我得到的大多是零返回数据和一些返回作为可以解包的可选数据。

我在 iCloud 上备份了我所有的照片,这可能是我得到零的原因吗??

下面是我的结构中的函数,它获取数据并将其附加到一个空数组变量...

我做错了什么?谢谢大家!

XCode log showing nil and optional returns

   func getAllImages() {
        let request = PHAsset.fetchAssets(with: .image, options: .none)
        
        DispatchQueue.global(qos: .background).async {
            let options = PHImageRequestOptions()
            options.isSynchronous = true
            
            request.enumerateObjects { (asset, _, _ ) in
                PHCachingImageManager.default().requestImage(for: asset, targetSize: .init(), contentMode: .default, options: options) { (image, _) in
                    print(image?.pngData())

                    // I had to coalesce with an empty UIImage I made as an extension
                    let data1 = Images(image: (image ?? UIImage.emptyImage(with: CGSize(width: 10, height: 10)))!, selected: false)
                    self.data.append(data1)
                }
            }
            
            if request.count == self.data.count {
                self.getGrid()
            }
            
        }
    }

【问题讨论】:

    标签: ios arrays phasset


    【解决方案1】:

    您看到的是nil 数据,因为图像资源在云端,而不是在您的手机上。 Optional 是预期的,因为它不能保证在您的手机上存在(就像在您的情况下它在云中一样)。

    您可以使用PHImageRequestOptions.isNetworkAccessAllowed 选项指示获取请求从云端获取照片(如果需要)。默认为false

    一个布尔值,指定照片是否可以从 iCloud 下载请求的图像。

    讨论

    如果true,并且请求的图像未存储在本地设备上,照片将从 iCloud 下载图像。要获得下载进度通知,请使用 progressHandler 属性提供一个块,供照片在下载图像时定期调用。

    如果false默认值),并且图像不在本地设备上,则结果处理程序的信息字典中的PHImageResultIsInCloudKey 值表示图像不可用,除非您启用网络访问。

    progressHandler备注

    您无需实现此功能即可允许 iCloud 照片下载。没有这个,iCloud 照片下载也可以工作。 如果您计划实现此功能以在 UI 上显示进度,您应该记住,这些调用会在一次下载时被多次触发。因此,在第一次调用 progressHandler 回调时,您不能认为您的照片下载已完成。

    讨论

    如果您请求的图像的数据不在本地设备上,并且您已使用 isNetworkAccessAllowed 属性启用下载,照片会定期调用您的块以报告进度并允许您取消下载强>。

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2014-04-22
      • 2015-04-01
      • 2010-10-29
      • 2014-06-29
      • 2012-01-18
      相关资源
      最近更新 更多