usan tipos sirve que program para las extensions extension developer archivos apple aplicaciones ios8 ios8-extension photokit ios-extensions

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.

  1. Puede reemplazar su bucle for-index por un bucle for-each más simple. Por ejemplo, algo como:

    for asset in PHAsset.fetchAssetsWithOptions(nil)

  2. 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.