假设有两个 iDevices: device1
和device2
. 两个设备都固定了一些foobar
从 Parse 后端检索到的对象。
device1
执行一个-deleteEventually
on foobar
。这会导致对象也被自动取消固定。这个删除被传播到后端,后端现在已经删除了 foobar。
device2
执行通常会获取的查询foobar
;除了,它不见了。
foobar
ondevice2
的本地数据存储会发生什么?
假设有两个 iDevices: device1
和device2
. 两个设备都固定了一些foobar
从 Parse 后端检索到的对象。
device1
执行一个-deleteEventually
on foobar
。这会导致对象也被自动取消固定。这个删除被传播到后端,后端现在已经删除了 foobar。
device2
执行通常会获取的查询foobar
;除了,它不见了。
foobar
ondevice2
的本地数据存储会发生什么?
由于本地数据存储是...本地的,因此对象将保留在第二个设备中,直到它接收到有关对象的更新,并再次固定它们(显然是在取消固定之后)。如果您不从后端请求新对象,则不会在第二个中进行任何更改。
这是我在我的应用程序中使用的此类问题的解决方案:
和代码示例:
- (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();
}
}];
}];
}