大约有10%的时间,PHImageManager.defaultManager().requestImageForAsset在首先返回有效但“降级”的UIImage后,返回nil而不是一个有效的UIImage。我无法在nil中看到任何错误或其他提示。
这似乎发生在需要从iCloud下载照片时,启用了iCloud照片库和优化iPad存储。我已经尝试更改选项、大小等,但似乎都没有影响。
如果在失败后重试requestImageForAsset请求,通常会正确返回UIImage,但有时需要多次重试。
我做错了什么?还是这只是Photos框架中的一个bug?
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)")
}
}
}
options.deliveryMode
设为HighQualityFormat
时,我看到了这种情况发生,但是当我将它设为Opportunistic
时却没有。 - Alfie Hanssen