Aplicación iOS: architecture / muestra para sincronizar CoreData contra Web-Service

Estoy buscando una aplicación de muestra o una discusión más arquitectónica para build una aplicación que mantenga una tienda local persistente (CoreData) y la mantenga sincronizada con un service web como Flickr. En mi caso, es Salesforce, pero el patrón debería ser similar a muchas aplicaciones para Flickr, Twitter, IMAP, etc.

Preguntas de muestra: ¿dónde están los mejores puntos para invocar la synchronization? ¿Cuáles son las estructuras de datos probadas para mantener los cambios locales? Mantenga un BOOL "cambiado" en la tienda local por cada cambio no sincronizado; Prefiero un indicador de nivel de campo contra un indicador de nivel de logging)?

Por supuesto, tengo que optimizar esto por mi count, sabiendo la cantidad de loggings (100's) y los cambios (10's por día) y la probabilidad de conflictos (baja en mi caso en el nivel de campo).

Así es como abordaré esto:

  1. Comience modelando una database local CoreData / Sqlite que refleje su database en línea.
  2. Agregue una propiedad NSDate lastModified a cada fila de cada tabla. Esto me permitirá rastrear los cambios en el nivel de logging, en lugar del nivel de campo. Esto ayuda a networkingucir la complejidad de la synchronization, y en la mayoría de los escenarios del mundo real, la synchronization de nivel de logging es suficiente.
  3. Realice una synchronization automática cuando se inicie la aplicación, y también proporcione un button destacado de "Sincronización" en su barra de navigation. De esta forma, el usuario siempre tiene un set de datos actualizado cuando la aplicación se inicia después de un largo período de time y puede sincronizar los últimos cambios en el transcurso de un día. Evitaría sincronizar en segundo plano mientras se usa la aplicación. Esto hará que su aplicación sea más compleja y propenso a errores cuando intente abordar otras cosas. Así que posponga el trabajo en segundo plano / synchronization automática hasta que tenga el rest funcionando.
  4. Una vez que tenga mi synchronization funcionando razonablemente bien en el lanzamiento y en la demanda, intentaré y apoyaré la synchronization en segundo plano. También intentaría eliminar el button "Sincronizar", por lo que el usuario nunca tiene que pensar en sincronizar (siempre está actualizado en lo que respecta al usuario). Pero esto sería una mejora a largo ploop, que intentaré solo después de haber sincronizado la synchronization "on-demand".

Espero que esto te ayude a comenzar. Me encantaría saber si piensas de manera diferente sobre esto.