|
Hola, quiero realizar una app para iOS en la que se vayan guardando datos que el usuario va añadiendo según utiliza la aplicación, tales como fecha, nombre, descripción... imaginad una app de control del gastos (la mía no es de esto pero en el funcionamiento es similar) en la que puedes meter tus gastos y cada gasto consta de: "Fecha, Importe del gasto en €, etiquetas asociadas al gasto y descripción (en mi caso también permitiría la inclusión de una fotografía)". Mi primera opción sería crear una base de datos Core Data (o quizás SQLite) pero claro, una de las funciones que quiero que tenga la app es que pueda guardar esos datos en iCloud y que en principio la sincronización sea transparente, que el fichero que se sincroniza sea la fuente de datos para la app directamente (y no que sea un script de generación de bbdd o de actualización lo que se sincronice, aunque igual tengo que ir por ese camino). Por eso pensé que quizás una solución sería guardar los datos en un fichero JSON y que sea de este de donde se lea y de donde se grabe, pero claro luego pensé que si el fichero iba creciendo yo no quería que la app tuviera que cargar todo el fichero para trabajar con él si no era necesario (hay casos en los que sí es necesario), ¿para qué quiero todo el fichero si voy a mostrar las últimas 20 entradas? Entonces pensé que estaría bien guardar cada objeto JSON en una sola linea y así recuperar las 20 primeras lineas del fichero y parsear una a una esos JSON obteniendo los 20 primeros elementos... Pero claro, al rato pensé (pienso demasiado :D) que si editaba algún registro iba a tener problemas para encontrarlo en el fichero y si encima cambiaba la fecha de un registro iba a tener que reordenar las filas del fichero para que estuvieran ordenadas en orden cronológico... Todo ésto solo deja claro que quizás lo mejor sería tirar por Core Data para guardar mis datos, es lo más limpio, elegante y versátil pero... vuelve a surgir el problema de iCloud, si guardo los datos en Core Data ¿cómo los sincronizo? ¿Qué opción creéis que es la correcta? ¿Lo haríais de otra manera? Un saludo. |
|
La mejor solución para tu caso creo que es Core Data. El API de 10.7 de Core Data ya incluye lo necesario para configurar el almacenamiento persistente para que se sincronice con iCloud. Lo mejor es que es "casi" transparante para la aplicación. Tu usas coredata como siempre, y el servicio de iCloud se encarga de registrar los cambios y sincronizarlos con el servidor. Y también al contrario. Cuando llegan cambios desde iCloud, se encarga de notificarte para que puedas reflejar en tu aplicación los cambios que se han hecho desde icloud. +1, Core Data está muy bien integrado con iCloud.
(16 Nov '11, 16:02)
Xavier Jurado ♦
|
|
Hola torhector2, Es un tema complejo el que comentas, por lo que no existe una única solución valida para todos los casos. Yo te recomendaría tener una base de datos local, para los datos que el usuario va insertando off-line y en cuanto tengas conexión co iCloud volcaría los datos al remoto. El problema de este mecanismo es que resultaría muy lento, ya que las lecturas en modo on-line se realizarían a iCloud. Una solución intermedia sería almacenar los datos en local y en remoto y tener un campo en local que indique si el valor esta sincronizado o no. Un saludo. Gracias, ya contaré cómo lo he hecho al final.
(09 Nov '11, 16:39)
torhector2
|