大约 10% 的时间 PHImageManager.defaultManager().requestImageForAsset 在第一次返回有效但“降级”的 UIImage 后返回 nil 而不是有效的 UIImage。没有错误或我能看到的其他线索在带有 nil 的信息中返回。
这似乎发生在需要从 iCloud 下载的照片上,同时启用了 iCloud 照片库和优化 iPad 存储。我尝试过更改选项、大小等,但似乎没有什么关系。
如果我在失败后重试 requestImageForAsset,它通常会正确返回 UIImage,但有时需要重试几次。
知道我可能做错了什么吗?或者它只是照片框架中的一个错误?
func photoImage(asset: PHAsset, size: CGSize, contentMode: UIViewContentMode, completionBlock:(image: UIImage, isPlaceholder: Bool) -> Void) -> PHImageRequestID? {
let options = PHImageRequestOptions()
options.networkAccessAllowed = true
options.version = .Current
options.deliveryMode = .Opportunistic
options.resizeMode = .Fast
let requestSize = !CGSizeEqualToSize(size, CGSizeZero) ? size : PHImageManagerMaximumSize
let requestContentMode = contentMode == .ScaleAspectFit ? PHImageContentMode.AspectFit : PHImageContentMode.AspectFill
return PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: requestSize, contentMode: requestContentMode, options: options)
{ (image: UIImage!, info: [NSObject : AnyObject]!) in
if let image = image {
let degraded = info[PHImageResultIsDegradedKey] as? Bool ?? false
completionBlock(image: photoBlock.rotatedImage(image), isPlaceholder: degraded)
} else {
let error = info[PHImageErrorKey] as? NSError
NSLog("Nil image error = \(error?.localizedDescription)")
}
}
}