ios web-services cocoa-touch core-data ios5

ios - Explicación de NSIncrementalStore en inglés simple



web-services cocoa-touch (3)

He estado viendo NSIncrementalStore a medida que he estado investigando las mejores formas de interactuar con un servicio web utilizando datos básicos.

Después de leer un artículo de Drew Crawford , una guía de programación , una referencia de clase y este tutorial un par de veces, sigo teniendo dificultades para entender qué es la tienda NSIncremental , por qué y cuándo la utilizaría.

¿Podría alguien explicarlo por favor?

Editar
Después de leer la respuesta de Mundi, puedo ver que se requiere algo más de contexto. Estoy estudiando el uso de datos básicos junto con un servicio web que estoy construyendo. Estoy intentando encontrar la mejor manera de almacenar la información de los usuarios localmente en el dispositivo y publicar en un servicio web cuando hay una conexión. Mi falta de conocimiento sobre los datos básicos impulsó mi investigación, pero no pude comprender completamente la utilidad de NSIncrementalStore .


En pocas palabras, si usa la tienda SQLite con sus Datos básicos, ya está utilizando una tienda incremental. Todos los beneficios de las tiendas incrementales (es decir, principalmente no tener que cargar toda la tienda en la memoria) ya están a su disposición.

En cuanto a la aplicación concreta de la API NSIncrementalStore , sugeriría que primero defina exactamente qué problema quiere resolver. Si necesita esta API o no, se determinará según las necesidades específicas de su tarea de programación.

EDITAR en respuesta a la pregunta editar

Simplemente lo haría así: En sus entidades de Datos Core en el dispositivo puede tener un atributo BOOL uploaded . Cuando el servicio web esté disponible, inicie una carga y extraiga todos los objetos que aún no se uploaded .

Para cargar, transforme sus objetos en NSArray y NSDictionary , tal vez en formato JSON y POST a su sitio web. Cuando el sitio web responde que guardó los datos, marque todos los objetos como uploaded .


Utilizaría NSIncrementalStore para acceder a un servidor remoto a través de Core Data. En lugar de leer y escribir en un archivo local, enviaría una solicitud al servidor y obtendría una respuesta que ingresaría en Core Data. Igualmente para guardar, etc.

Tenga en cuenta, sin embargo, que esto no es trivial de hacer. Es una característica muy poderosa, pero a menos que sea un experto en el uso de Core Data, la desaconsejo, ya que existen infinitas oportunidades para dispararse a sí mismo a menos que sepa mucho sobre cómo interactúa Core Data con la capa de almacenamiento. trabajos.

Si usar un archivo uploaded resuelve tu problema, hazlo en su lugar.


NOTA: esta API estaba a la vanguardia cuando escribí esto en 2012 y los detalles han cambiado. Siéntase libre de actualizar esto si lo desea. No estoy trabajando en ningún proyecto Cocoa / ObjC en este momento, por lo que no soy una buena persona para mantener esto actualizado, desafortunadamente. Parece que la esencia general es correcta.

Core Data proporciona un conjunto de herramientas que ayudan a administrar la persistencia del objeto, es decir, la capacidad de guardar y luego recuperar conjuntos de objetos ( NSManagedObject ) de algún tipo de almacenamiento.

Cuando trabaja con objetos Core Data, lo hace utilizando un NSManagedObjectContext , que obtiene de un NSPersistentStoreCoordinator . El PSC, a su vez, habla con una o más subclases de NSPersistentStore , que manejan las operaciones reales en la tienda. (Piense en crear / leer / actualizar / eliminar en una base de datos).

Core Data admite dos tipos principales de tienda: NSPersistentStore y NSAtomicStore . Un almacén persistente se puede considerar como una base de datos: puedes guardar, actualizar y obtener de forma incremental conjuntos de registros arbitrarios. Un almacén atómico es una representación ''todo o nada'' de un gráfico de objeto. Se pretende que sea una representación en memoria de un archivo estructurado.

Los tipos de tienda con los que viene Core Data son:

  • NSSQLLiteStoreType ( NSPersistentStore )
  • NSInMemoryStoreType ( NSPersistentStore )
  • NSXMLStoreType ( NSAtomicStore )
  • NSBinaryStoreType ( NSAtomicStore )

NSPersistentStore está explícitamente prohibido de ser subclasificado, por lo que hasta ahora, no ha habido ninguna manera de crear su propio backend de tienda no atómica. Es decir, si desea persistir y consultar representaciones de sus objetos por partes en lugar de hacerlo en un gran bulto (''cargar todo el gráfico'', ''guardar todo el gráfico''), no ha tenido suerte. Hasta que iOS5 introdujo NSIncrementalStore .

NSIncrementalStore es una clase abstracta (desciende de NSPersistentStore ) cuyos métodos implementas para proporcionar un adaptador entre un almacén de datos que controlas y el mundo de Core Data. Puede usarlo para envolver una API remota, o si estuviera tan inclinado podría envolver algo como NULevelDB o NanoStore (aunque no estoy seguro de por qué haría eso).