subir que porque pasa mis las guardar funciona fototeca fotos desactivo como cargan borrarlas almacenamiento ios objective-c uiimageview uiimage nsfilemanager

ios - pasa - porque las fotos de mi iphone no cargan



Almacenamiento de imágenes localmente en un dispositivo con iOS (3)

Algunas aplicaciones relacionadas con fotos de iOS almacenan imágenes creadas con la aplicación en algún lugar que no sea la biblioteca de fotos. Por ejemplo, Fat Booth muestra una lista desplegable de fotos creadas con la aplicación al inicio de la aplicación. Tenga en cuenta que estas fotos se conservan sin que el usuario las guarde explícitamente en la biblioteca de fotos. ¿Cuál es la forma más sencilla de guardar y conservar imágenes dentro de una aplicación de iOS?

Las únicas tiendas persistentes con las que estoy familiarizado son NSUserDefaults y el llavero. Sin embargo, nunca he oído hablar de estos utilizados para almacenar datos más grandes, como una imagen. Ahora me pregunto si Core Data es la forma más fácil.


La forma más simple es guardarlo en el directorio de Documentos de la aplicación y guardar la ruta con NSUserDefaults de esta manera:

NSData *imageData = UIImagePNGRepresentation(newImage); NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *imagePath =[documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png",@"cached"]]; NSLog(@"pre writing to file"); if (![imageData writeToFile:imagePath atomically:NO]) { NSLog(@"Failed to cache image data to disk"); } else { NSLog(@"the cachedImagedPath is %@",imagePath); }

A continuación, guarde el imagePath en algún diccionario en NSUserDefaults o como quiera, y luego para recuperarlo simplemente haga lo siguiente:

NSString *theImagePath = [yourDictionary objectForKey:@"cachedImagePath"]; UIImage *customImage = [UIImage imageWithContentsOfFile:theImagePath];


Para Swift:

let imageData = UIImagePNGRepresentation(selectedImage) let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String let imagePath = paths.stringByAppendingPathComponent("cached.png") if !imageData.writeToFile(imagePath, atomically: false) { println("not saved") } else { println("saved") NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath") }

Para Swift 2.1:

let imageData = UIImagePNGRepresentation(selectedImage) let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] let imageURL = documentsURL.URLByAppendingPathComponent("cached.png") if !imageData.writeToURL(imageURL, atomically: false) { print("not saved") } else { print("saved") NSUserDefaults.standardUserDefaults().setObject(imageData, forKey: "imagePath") }

stringByAppendingPathComponent no está disponible en Swift 2.1 por lo que puede usar URLByAppendingPathComponent. Obtenga más información here.


Puede hacerlo con datos básicos almacenando datos binarios, pero no es recomendable . Hay una manera mucho mejor, especialmente para fotos. Su aplicación tiene un directorio de documentos / archivos al que solo su aplicación puede acceder. Recomiendo comenzar aquí por los conceptos y cómo acceder a ellos. Es relativamente sencillo. Es posible que desee combinar esto con datos centrales para almacenar rutas de archivos, metadatos, etc. http://developer.apple.com/library/mac/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html