ios - limpiar - Se puede analizar la memoria caché reemplazar datos de núcleo
limpiar iphone 6 (3)
Estoy creando un directorio de contactos simple con funciones CRUD y quiero tener la funcionalidad de edición fuera de línea. Mi base de datos para los contactos se almacenará en un backend de Parse.com. ¿Sería esto posible usar la funcionalidad de caché Parse, o sería mejor para mí recurrir al uso de Core Data?
No, no puede. No es lo mismo, sugiero https://github.com/itsniper/FTASync
Parse iOS / OSX SDK proporciona un almacén de datos local que se puede usar para almacenar y recuperar PFObjects, incluso cuando la red no está disponible. Para habilitar esta funcionalidad, agregue libsqlite3.dylib y llame a [Parse enableLocalDatastore] antes de su llamada a setApplicationId: clientKey :.
Como se indica en la documentación de Parse :
Puede almacenar un PFObject en el almacén de datos local fijándolo. Fijar un objeto PFO es recursivo, al igual que guardar, por lo que cualquier objeto señalado por el objeto que está fijando también se fijará. Cuando se fija un objeto, cada vez que lo actualice obteniendo o guardando nuevos datos, la copia en el almacén de datos local se actualizará automáticamente. No tienes que preocuparte por eso en absoluto.
PFObject *gameScore = [PFObject objectWithClassName:@"GameScore"]; gameScore[@"score"] = 1337; gameScore[@"playerName"] = @"Sean Plott"; gameScore[@"cheatMode"] = @NO; [gameScore pinInBackground];
Si tiene varios objetos, puede anclarlos todos a la vez con el método de conveniencia pinAllInBackground.
[PFObject pinAllInBackground:listOfObjects];
Recuperar un objeto del almacén de datos local funciona igual que recuperar uno a través de la red. La única diferencia es llamar al método fromLocalDatastore para decirle a PFQuery dónde buscar sus resultados.
PFQuery *query = [PFQuery queryWithClassName:@"GameScore"]; [query fromLocalDatastore]; [[query getObjectInBackgroundWithId:@"xWMyZ4YE"] continueWithBlock:^id(BFTask *task) { if (task.error) { // Something went wrong. return task; } // task.result will be your game score return task; }];
Cualquier PFQuery se puede utilizar con el almacén de datos local al igual que con la red. Los resultados incluirán cualquier objeto que haya fijado que coincida con la consulta. Cualquier cambio no guardado que haya realizado en el objeto se considerará al evaluar la consulta. Por lo tanto, puede encontrar un objeto local que coincida, incluso si nunca fue devuelto desde el servidor para esta consulta en particular.
PFQuery *query = [PFQuery queryWithClassName:@"GameScore"]; [query fromLocalDatastore]; [query whereKey:@"playerName" equalTo:@"Joe Bob"]; [[query findObjectsInBackground] continueWithBlock:^id(BFTask *task) { if (task.error) { NSLog(@"Error: %@", task.error); return task; } NSLog(@"Retrieved %d", task.result.count); return task; }];
Cuando haya terminado con un objeto y ya no necesite que esté en el almacén de datos local, simplemente puede quitarlo.
[gameScore unpinInBackground];
También hay un método para separar varios objetos a la vez.
[PFObject unpinAllInBackground:listOfObjects];
Para obtener más información sobre el uso del almacén de datos local de Parse, consulte la documentación del almacén de datos local provista para iOS / OSX en el sitio web de parse.
No, no puede. Parse simplemente almacena en caché los resultados de sus consultas. Esto es extremadamente limitante y no es lo mismo que almacenar en caché todos sus PFObjects. Por ejemplo, supongamos que ejecutó una consulta para todos sus PFObjects de "contactos". Lo único que podría hacer con el caché es ejecutar la misma consulta nuevamente más tarde (y obtener el mismo resultado exacto). Ni siquiera se podía consultar un subconjunto de los datos en caché.
Otro problema es que los objetos almacenados en caché no se actualizarán con ningún cambio que su usuario esté realizando en sus PFObjects. Por ejemplo, digamos que un usuario está editando contactos fuera de línea y su código está llamando a saveEventually
para guardar esos cambios en Parse cuando sea posible. Cuando obtiene un resultado de consulta en caché, los cambios del usuario no se reflejarán en sus PFObjects. Lo mismo ocurre con PFObjects eliminados y agregados, creo. Esto haría que el uso fuera de línea sea terrible. Aquí hay un hilo del foro Parse que toca este tema:
He visto a los desarrolladores de Parse mencionar que el almacenamiento en caché mejorado de los objetos Parse llega en algún momento en el futuro. Sin embargo, esta característica aún no existe y no se sabe cuándo vendrá. Mientras tanto, si desea admitir el uso sin conexión, debe usar Core Data o alguna otra tienda local. FTASync (que nunca he usado) está diseñado para sincronizar objetos Parse con datos centrales:
https://github.com/itsniper/FTASync
También puede escribir su propio código para sincronizar los dos conjuntos de datos.