在后端删除时,固定在 Parse Local 数据存储中的对象也会被删除吗?
Do objects pinned in Parse Local datastore get deleted as well when it's deleted on the backend?
假设有两台设备:device1
和device2
。两个设备都固定了从 Parse 后端检索到的一些对象 foobar
。
device1
在 foobar
上执行 -deleteEventually
。这会导致对象也自动取消固定。此删除会传播到后端,后端现在已删除 foobar。
device2
执行通常会获取 foobar
的查询;除了,它不见了。
device2
的本地数据存储上的 foobar
会怎样?
由于本地数据存储是...本地的,因此对象将保留在第二个设备中,直到它收到有关对象的更新,并再次固定这些对象(显然在取消固定之后)。如果您不从后端请求新对象,则不会在第二个中进行任何更改。
这是我在我的应用程序中使用的此类问题的解决方案:
- 使用 PFQuery 从解析中获取对象
- 在本地进行查询并从本地存储中获取对象
- 取消固定在本地存储中找到的对象
- 固定来自网络的对象
和代码示例:
- (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();
}
}];
}];
}
假设有两台设备:device1
和device2
。两个设备都固定了从 Parse 后端检索到的一些对象 foobar
。
device1
在 foobar
上执行 -deleteEventually
。这会导致对象也自动取消固定。此删除会传播到后端,后端现在已删除 foobar。
device2
执行通常会获取 foobar
的查询;除了,它不见了。
device2
的本地数据存储上的 foobar
会怎样?
由于本地数据存储是...本地的,因此对象将保留在第二个设备中,直到它收到有关对象的更新,并再次固定这些对象(显然在取消固定之后)。如果您不从后端请求新对象,则不会在第二个中进行任何更改。
这是我在我的应用程序中使用的此类问题的解决方案:
- 使用 PFQuery 从解析中获取对象
- 在本地进行查询并从本地存储中获取对象
- 取消固定在本地存储中找到的对象
- 固定来自网络的对象
和代码示例:
- (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();
}
}];
}];
}