tiene tengo sistema seguridad que puede pero nada memoria lleno limpiar liberar interna gestionar espacio documentos datos cómo copia cambiar almacenamiento iphone design image core-data storage

tengo - mi iphone dice que no tiene espacio pero si tiene



Datos principales: almacenamiento de imágenes(iPhone) (4)

Tengo una aplicación en la que le permito al usuario agregar una imagen para su cuenta.

Deseo saber cómo almacenar una imagen (obtenida de la cámara o biblioteca de fotos) utilizando Core Data , ya que puedo ofrecer una instalación de respaldo para el usuario y estaría buscando transferir los datos de la imagen a un servidor.

Me encontré con la sugerencia de diseño de crear un objeto de modelo de Image y crear una relación de 1 a 1 con el objeto de modelo de User (para que el objeto de imagen asociado no se active a menos que sea necesario). Sin embargo, no estoy seguro de cómo almacenar prácticamente la imagen y si esto es potencialmente fatal en términos de rendimiento.

Agradecería cualquier consejo sobre el enfoque y las trampas de cualquiera que haya intentado esto.


La regla para almacenar datos de imagen en Core Data es la siguiente:

  • <100 kb almacenar en la entidad relacionada (persona, dirección, lo que sea)
  • <1 mb tienda en una entidad separada en el otro extremo de una relación para evitar problemas de rendimiento.
  • Almacene 1 mb en el disco y haga referencia a la ruta en su almacén de datos centrales.

Puede usar el tipo de datos transformables para almacenar el NSImage directamente en Core Data. De hecho, puede usar el tipo de datos transformables para almacenar cualquier cosa que implemente el protocolo NSCoder.

Personalmente, no lo convertiría en un CGImageRef ya que puede perder mucha información de esa manera.


Pasó el tiempo desde que se hizo esta pregunta, pero quiero compartir mi experiencia sobre este tema.


No recomendaría que guardes imágenes dentro de DB si su número no está limitado. Siempre debe recordar que algún día agregará una nueva versión del modelo de datos y tendrá que migrar de un DB antiguo a uno nuevo en la actualización de la aplicación. Toma tiempo. Cuanto más grande sea su archivo DB, más tiempo tardará en migrar.

Si desea almacenar imágenes en DB, asegúrese de no agregar una tienda persistente en la application: didFinishLaunchingWithOptions: método de UIApplicationDelegate . iOS terminará su aplicación si la migración no se completa en XX segundos.


Peligro: puede terminar una base de datos sqlite enorme y difícil de manejar. ¿Realmente desea que sus usuarios carguen varios archivos MB en un solo paso al servidor? ¿Qué haces si la conexión de celluar se descompone durante unos segundos?

Creo que sería mejor si usa Core Data para administrar sus imágenes y su estado de carga (subido: sí o no). De esta forma, puede cargar las imágenes cuando encajen en el flujo de trabajo de su aplicación. De acuerdo, durará un poco más, debido a las muchas conexiones. Pero es un enfoque más limpio, creo ...

Cuando piensas en iTunes, cuando hablas de copias de seguridad: la carpeta ''Documentos'' de tu iPhone local está sincronizada de todos modos.


Tendría que tener aaa, entonces podría hacer algo como esto:

CGImageRef imageRef = uiImage.CGImage; CGDataProviderRef dataProvider = CGImageGetDataProvider(imageRef); NSData *imageData = (NSData*)CGDataProviderCopyData(dataProvider); [managedObject setValue:imageData forKey:@"data"];

Donde managedObject es su objeto de imagen principal de datos y @ "data" es el nombre de la propiedad binaria. Es posible que también deba guardar el formato de imagen para deserializar la imagen más adelante.

Otra opción es guardar la imagen en el disco y almacenar la ruta en los datos centrales.