Pregunta

Sé que esta pregunta se ha possed antes, pero la explicación era un poco claro para mí, mi pregunta es un poco más general. Estoy tratando de conceptualizar cómo se podría actualizar periódicamente los datos en una aplicación para el iPhone, usando un servicio web remoto. En teoría, una parte de los datos en el teléfono se sincroniza periódicamente (sólo cuando se actualiza). Mientras que otros datos se requiere que el usuario sea en línea, y se solicitará al vuelo.

Conceptualmente, esto parece posible el uso de XML-RPC o datos JSON y Core. Me pregunto si alguien tiene una opinión sobre la mejor manera de implementar esto, soy un desarrollador de iPhone novato, pero entiendo gran parte del proceso conceptual.

Gracias

¿Fue útil?

Solución

Para sincronizar un conjunto de entidades cuando usted no tiene control sobre el servidor, aquí es uno de los enfoques:

  1. Añadir un atributo touched BOOL a su descripción entidad.

  2. En un intento de sincronización, marcar todas las instancias de entidad como intacta (touched = [NSNumber numberWithBool:NO]).

  3. Loop a través de su del lado del servidor (JSON) instancias y añadir o entidades de actualización de su tienda de datos básicos para su tienda del lado del servidor, o viceversa. La dirección de la actualización dependerá de su póliza de sincronización, y qué datos es "fresco" a cada lado. De cualquier manera, la marca se agreguen, actualicen o sync'ed entidades Núcleo de datos como tocado (touched = [NSNumber numberWithBool:YES])

  4. En función de la política de sincronización, eliminar todas las instancias de la entidad desde su almacén de datos básicos que están todavía intactas. entidades vírgenes fueron presumiblemente eliminan de su tienda del lado del servidor, ya que ningún Además, actualizar o sincronizar evento tuvo lugar entre el almacén de datos básicos y el servidor para esos objetos.

La sincronización es una buena cantidad de trabajo para implementar y dependerá de qué grado de sincronización que necesita apoyo. Si acaba de extracción de datos, paso 3 es considerablemente más sencilla, ya que no necesitará actualizaciones de inserción de objetos en el servidor.

Otros consejos

La sincronización es duro, muy duro. Lo ideal sería que usted quiere recibir los deltas de los cambios del servidor y luego usando un identificador único para cada registro en la base de datos, actualizar sólo aquellos registros que son nuevos o modificados.

Suponiendo que usted puede hacer eso, entonces el código es bastante sencillo. Si estás sincronizando en ambas direcciones, entonces las cosas se ponen más complicadas porque hay que realizar un seguimiento de los deltas de ambos lados y colisiones mango.

Puede aclarar qué tipo de sincronización se desean lograr? Es bidireccional o tirón solamente?

Tengo una respuesta, pero es fastidioso. Actualmente estoy buscando una solución más aceptable / fiable (es decir, nada Marcus Zarra cocineros).

Lo que he hecho algunos trabajos necesidades ... en serio, ya que no funciona todo el tiempo ...

El dispositivo móvil cuenta con un catálogo de entidades JSON, sus versiones, y una URL que apunta a un archivo JSON con el contenido de la entidad.

El servidor tiene la misma configuración, el catálogo encontrado las entidades, etc.

Siempre que el dispositivo móvil se inicia, compara las versiones de la misma entidad de catálogo local con el catálogo en el servidor. Si cualquiera de estas versiones en el servidor son más recientes, que ofrece al usuario la posibilidad de descargar las actualizaciones de la entidad.

Cuando los elegidos por el usuario a la actualización, el dispositivo móvil tiene ahora la dirección URL para cada una de las nuevas entidades / cambiado y lo descarga. Una vez descargada, la aplicación va soplar todos los objetos para cada una de las entidades cambiado, y luego insertar los nuevos objetos a partir de JSON. En el caso de un error, las deleciones / inserciones se deshacen comprobar la validez de actualización de estado.

Estos trabajos, más o menos. No puedo cogerlo en una sesión de depuración cuando se va mal, así que no estoy seguro de lo que podría causar la corrupción o la falta de coherencia en el proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top