Примерно в 10% случаев PHImageManager.defaultManager(). requestImageForAsset возвращает nil вместо действительного UIImage после первого возврата действительного, хотя и "деградированного" UIImage. Никакая ошибка или другая подсказка, которую я вижу, не возвращаются в информации с нулем.
Это похоже на фотографии, которые необходимо загрузить из iCloud, с включенной iCloud Photo Library и Optimize iPad Storage. Я попытался изменить параметры, размер и т.д., Но ничего не имеет значения.
Если я повторю запрос requestMageForAsset после сбоя, он обычно правильно вернет 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)")
}
}
}