Persistencia de Firebase, borrar caché de Firebase


Mi aplicación utiliza Firebase para sincronizar y restaurar datos. Utilizo el método setValue:withCompletionBlock: para insertar, actualizar y eliminar objetos Firebase. Este método se llama siempre que hay un guardado de CoreData, sincronizando así todos mis cambios locales a Firebase

- (void) setValue:(id)value withCompletionBlock:(void (^)(NSError* error, Firebase* ref))block;

Ahora la sincronización carga todos los datos locales a firebase, mientras que restore reemplaza los datos locales con datos de firebase.

- (void) observeSingleEventOfType:(FEventType)eventType withBlock:(void (^)(FDataSnapshot* snapshot))block;

Observo FEventTypeValue y uso el FDataSnapshot para obtener datos de la base de fuego y restaurar los datos locales.

Así que todo funciona perfectamente para mí hasta que me puse persistence a la Base de fuego.

[Firebase setOption:@"persistence" to:@YES];

Ahora cuando persistence está activado, cuando actualizo, digamos insertar un objeto en Firebase, y luego restaurar, los datos antes de que se restaure la inserción. es decir, el objeto recién insertado no se restaura. Sin embargo, si vuelvo a restaurar, el objeto insertado se restaura. Lo mismo sucede cuando se elimina un objeto. El objeto eliminado reaparece cuando restauro por primera vez y desaparece cuando restauro de nuevo. Puedo ver que los objetos de la Base de fuego son insertado y / o eliminado correctamente a través de la vista de datos de Firebase.

No estoy seguro de lo que estoy haciendo mal aquí. Solo tengo problemas cuando restauro. Creo que la caché de Firebase está causando este problema de restauración. Estoy pensando en limpiar el caché de la Base de Fuego antes de restaurarlo. Mi pregunta es

  1. ¿Limpiar la caché antes de una restauración es un buen método?
  2. En caso afirmativo, ¿cómo borrar la caché de Firebase?
  3. Si no, me puede sugerir el mejor método para restaurar los datos.
Author: Infinite Loops, 2014-06-25

1 answers

Desafortunadamente, este es el comportamiento esperado con la versión beta actual de la persistencia del disco. Probablemente pueda evitarlo usando observeEventOfType en lugar de observeSingleEventOfType

Básicamente, cada vez que observes datos, primero vamos a extraer datos de nuestra caché persistente. Esos datos serán los datos que recibimos por última vez de la Base de Fuego. Debido a que está utilizando observeSingleEventOfType en lugar de observeEventOfType, no recibirá actualizaciones regulares de Firebase y por lo tanto los datos que hemos almacenado en caché en realidad no incluirá los últimos datos que escribió.

Como una solución simple, es posible que pueda agregar un observeEventOfType en los datos en cuestión. En realidad no necesitas hacer nada con los eventos. Pero si los escuchas todo el tiempo, entonces tu aplicación obtendrá los últimos datos de firebase y cuando llames a observeSingleEventOfType, puedes estar seguro de que tendrá los últimos datos almacenados en caché.

Esto es un poco hacky, y tenemos la intención de simplificar esta API antes de lanzar la función de persistencia en una forma no beta. ¡Perdón por el dolor!

 25
Author: Michael Lehenbauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-01 18:23:54