Удаляются ли объекты, закрепленные в локальном хранилище данных Parse, также, когда они удаляются на бэкэнде?
Предположим, что существует два iDevices: device1
и device2
. Оба устройства закрепили некоторый объект foobar
, извлеченный из бэкенда синтаксического анализа.
device1
выполняет -deleteEventually
на foobar
. Это приводит к тому, что объект также автоматически открепляется. Это удаление распространяется на серверную часть, и теперь серверная часть удалила foobar.
device2
выполняет запрос, который обычно извлекает foobar
; за исключением того, что он отсутствует.
Что происходит с foobar
в локальном хранилище данных device2
?
2 ответа:
Как локальное хранилище данных...локальный, то объект будет храниться во втором устройстве до тех пор, пока он не получит обновление об объектах, и закрепить их снова (после открепления очевидно). Во втором случае изменения не будут внесены, если вы не запрашиваете новые объекты из бэкенда.
Вот решение для этого типа проблемы, которую я использую в своем приложении:
- Использование PFQuery выборка объектов из parse
- сделайте запрос локальным и извлеките объекты из локального хранилища
- открепите объекты, если они были найдены в локальном хранилище
- 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(); } }]; }]; }