Удаляются ли объекты, закрепленные в локальном хранилище данных Parse, также, когда они удаляются на бэкэнде?


Предположим, что существует два iDevices: device1 и device2. Оба устройства закрепили некоторый объект foobar, извлеченный из бэкенда синтаксического анализа.

device1 выполняет -deleteEventually на foobar. Это приводит к тому, что объект также автоматически открепляется. Это удаление распространяется на серверную часть, и теперь серверная часть удалила foobar.

device2 выполняет запрос, который обычно извлекает foobar; за исключением того, что он отсутствует.

Что происходит с foobar в локальном хранилище данных device2?

2 3

2 ответа:

Как локальное хранилище данных...локальный, то объект будет храниться во втором устройстве до тех пор, пока он не получит обновление об объектах, и закрепить их снова (после открепления очевидно). Во втором случае изменения не будут внесены, если вы не запрашиваете новые объекты из бэкенда.

Вот решение для этого типа проблемы, которую я использую в своем приложении:

  1. Использование PFQuery выборка объектов из parse
  2. сделайте запрос локальным и извлеките объекты из локального хранилища
  3. открепите объекты, если они были найдены в локальном хранилище
  4. pin-объекты, поступившие из сети

И образец кода:

- (BFTask *)find:(PFQuery *)query {
    return [[query findObjectsInBackground] continueWithSuccessBlock:^id(BFTask *task) {
        BFTask *(^pin)(void) = ^ {
            return [[PFObject pinAllInBackground:task.result] continueWithExecutor:[BFExecutor mainThreadExecutor]
                                                                  withSuccessBlock:^id(BFTask *task) {
                                                                      return task.result;
                                                                  }];
        };

        [query fromLocalDatastore];
        return [[query findObjectsInBackground] continueWithBlock:^id(BFTask *task) {
            if (!task.error && [task.result count]) {
                return [[PFObject unpinAllInBackground:task.result] continueWithBlock:^id(BFTask *task) {
                    return pin();
                }];
            } else {
                return pin();
            }
        }];
    }];
}