Circa il 10% delle volte PHImageManager.defaultManager(). RequestImageForAsset restituisce nil invece di una UIImage valida dopo aver restituito una UIImage valida, sebbene "degradata". Nessun errore o altro indizio che posso vedere viene restituito nelle informazioni con il nullo.PHImageManager requestImageForAsset restituisce a volte nil per le foto di iCloud
Questo sembra accadere con le foto che devono essere scaricate da iCloud, con iCloud Photo Library e Optimize iPad Storage entrambi abilitati. Ho provato a cambiare le opzioni, le dimensioni, ecc. Ma nulla sembra importare.
Se ritento la richiestaImageForAsset dopo l'errore, in genere restituirà correttamente un UIImage, anche se a volte richiede un paio di tentativi.
Qualche idea su cosa potrei fare male? O è solo un bug nel framework Photos?
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)")
}
}
}
Ho esattamente lo stesso problema, hai trovato qualche soluzione per questo? – dlinsin
Sto vedendo lo stesso problema. Credo che sia un bug e abbia presentato una segnalazione di bug. – Joey
Sto vedendo questo accadere quando ho impostato 'options.deliveryMode = .HighQualityFormat' ma non quando ho impostato' options.deliveryMode = .Opportunistic' –