ios8 - sirve - tipos de archivos de ios
Recuperar ALAsset o PHAsset desde la URL del archivo (3)
Hice lo que no quería hacer y lancé este enfoque de búsqueda tonta juntos. Funciona, aunque es horrible, lento y me da problemas de memoria cuando la fototeca es grande.
Como novato de Cocoa y Swift, apreciaría consejos de refinamiento. ¡Gracias!
func PHAssetForFileURL(url: NSURL) -> PHAsset? {
var imageRequestOptions = PHImageRequestOptions()
imageRequestOptions.version = .Current
imageRequestOptions.deliveryMode = .FastFormat
imageRequestOptions.resizeMode = .Fast
imageRequestOptions.synchronous = true
let fetchResult = PHAsset.fetchAssetsWithOptions(nil)
for var index = 0; index < fetchResult.count; index++ {
if let asset = fetchResult[index] as? PHAsset {
var found = false
PHImageManager.defaultManager().requestImageDataForAsset(asset,
options: imageRequestOptions) { (_, _, _, info) in
if let urlkey = info["PHImageFileURLKey"] as? NSURL {
if urlkey.absoluteString! == url.absoluteString! {
found = true
}
}
}
if (found) {
return asset
}
}
}
return nil
}
La selección de imágenes en Photos.app para pasar a una extensión de acción parece ceder rutas a las imágenes en el disco (por ejemplo: file:///var/mobile/Media/DCIM/109APPLE/IMG_9417.JPG
). ¿Hay alguna forma de obtener el ALAsset o PHAsset correspondiente?
La URL parece que corresponde a la entrada PHImageFileURLKey
que recibe al llamar a PHImageManager.requestImageDataForAsset
. No me gustaría tener que recorrer todos los PHAsset para encontrarlo.
Así que este es un comentario sobre ("consejos de refinamiento") para su auto-respuesta. O sea que los comentarios no se cortan para muestras de código, así que aquí vamos.
Puede reemplazar su bucle for-index por un bucle for-each más simple. Por ejemplo, algo como:
for asset in PHAsset.fetchAssetsWithOptions(nil)
Desde la última vez que verifiqué, la clave en la
info["PHImageFileURLKey"]
no está documentada. Estar informado. No creo que te haga rechazar, pero el comportamiento podría cambiar en cualquier momento.
Pregunta: ¿Por qué quieres hacer esto? ¿Quieres llamar / usar cualquier método de PhotoKit? Preferiría trabajar directamente con el archivo, que pasa en Photos-App.