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