Сохраняемость Firebase, очистить кэш Firebase

мое приложение использует Firebase для синхронизации и восстановления данных. Я использую setValue:withCompletionBlock: метод вставки, обновления и удаления объектов Firebase. Этот метод вызывается всякий раз, когда есть сохранение CoreData, таким образом синхронизируя все мои локальные изменения с Firebase

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

теперь синхронизация загружает все локальные данные в firebase, а restore заменяет локальные данные данными firebase.

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

Я вижу FEventTypeValue и с помощью FDataSnapshot получить данные от Firebase и восстановить местное данные.

так что все работает отлично для меня, пока я не установил persistence на Firebase.

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

теперь, когда persistence включен, когда я обновляю, скажем, вставляю объект в Firebase, а затем восстанавливаю данные до восстановления вставки. т. е. вновь вставленный объект не восстанавливается. Однако, если я восстановлю снова, вставленный объект будет восстановлен. То же самое происходит, когда объект удаляется. Удаленный объект появляется, когда я восстанавливаю в первый раз и исчезает, когда я снова восстановить. Я вижу, что объекты Firebase вставлены и / или удалены правильно через представление данных Firebase.

Я не уверен, что я делаю неправильно здесь. У меня проблема только при восстановлении. Я думаю, что кэш Firebase вызывает эту проблему восстановления. Я думаю очистить кэш Firebase перед восстановлением. Мой вопрос

  1. является ли очистка кэша перед восстановлением хорошим методом?
  2. если да, то как очистить опорный пункт кэш?
  3. если нет, можете ли вы предложить мне лучший способ для восстановления данных.

1 ответов


к сожалению, это ожидаемое поведение с текущей бета-версией сохраняемости диска. Вероятно, вы можете обойти это, используя observeEventOfType вместо observeSingleEventOfType

в принципе, всякий раз, когда вы наблюдаете данные, мы собираемся вытащить данные из нашего постоянного кэша в первую очередь. Эти данные будут теми, которые мы в последний раз получали с базы. Поскольку вы используете observeSingleEventOfType вместо observeEventOfType, вы не будете получать регулярные обновления от Firebase и поэтому данные, которые мы кэшировали, фактически не будут включать последние данные, которые вы написали.

Как легко исправить, можно просто добавить observeEventOfType на данных вопрос. На самом деле вам не нужно ничего делать с событиями. Но если вы слушаете их все время, то ваше приложение будет получать последние данные из firebase, и когда вы вызываете observeSingleEventOfType, вы можете быть уверены, что у него будут последние данные кэшированный.

Это немного хаки, и мы намерены упростить этот API, прежде чем выпустить функцию персистентности в не-бета-форме. Прости за боль!