在将PHAsset转换为UIImage时获得非致命但意外的错误

K.W*_*.Wu 5 ios swift

我使用此代码将a转换PHAsset为完整大小UIImage:

func getOriginalAsset(asset: PHAsset, onComplete: @escaping (UIImage?, [AnyHashable: Any]?) -> ()) {
    let manager = PHImageManager.default()
    let option = PHImageRequestOptions()
    option.isNetworkAccessAllowed = true

    manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: option) { (image, info) in
        onComplete(image, info)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每次我尝试运行此代码时,我都会从控制台收到此警告:

[ImageManager] First stage of an opportunistic image request returned a non-table format image, this is not fatal, but it is unexpected
Run Code Online (Sandbox Code Playgroud)

  1. 为什么我会收到此警告?

  2. 我该如何解决这个问题?

更新

尽管有警告,我运行此代码时一切正常.我无法忍受我的应用程序中的任何警告/错误(也许我迟早要学会接受它)

a.m*_*sri 10

尝试使用这段代码,我添加isSynchronous = true你可以阅读这个文件isSynchronous

我将快速向您解释问题的原因出现此问题是因为opatation显示直到图像结束并且您要求大尺寸图像可能需要一些时间,所以您应该在等待期间进行线程直到获取图像的过程

func getOriginalAsset(asset: PHAsset, onComplete: @escaping (UIImage?, [AnyHashable: Any]?) -> ()) {
        let manager = PHImageManager.default()
        let option = PHImageRequestOptions()
        option.isNetworkAccessAllowed = true
        option.isSynchronous = true 
        manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFit, options: option) { (image, info) in
            onComplete(image, info)
        }
}
Run Code Online (Sandbox Code Playgroud)