我正在测试Parse localDatastore,并且在新的服务器PFQuery之后我正在努力刷新本地数据存储区。
PFQuery工作正常,似乎将数组固定到本地数据存储区就好了。当我在服务器上更改数组的内容时,服务器PFQuery会下拉更新的数组,但本地数据存储区似乎没有更新:
- (void)viewDidLoad {
[super viewDidLoad];
// Query Parse
PFQuery *query = [PFQuery queryWithClassName:@"contacts"];
NSArray *objects = [query findObjects];
[PFObject pinAllInBackground:objects block:^(BOOL succeeded, NSError *error) {
if(succeeded) {
NSLog(@"Successfully retrieved %lu records from Parse.", (unsigned long)objects.count);
} else if (error) {
NSLog(@"Error");
}
}];
}
然后使用UIButton将本地数据存储的内容记录到控制台:
-(IBAction)showDatastore {
// Query the Local Datastore
PFQuery *query = [PFQuery queryWithClassName:@"contacts"];
[query fromLocalDatastore];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSLog(@"Successfully retrieved %lu contacts from Datastore.", (unsigned long)objects.count);
} else {
// Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
在我的示例中,原始数组有15个对象。每个数组的计数最初都是15.然后从服务器阵列中删除一个对象,初始PFQuery计数为14,但本地数据存储计数仍为15.
Parse的文档说明:
固定对象时,每次通过提取或保存新数据进行更新时,本地数据存储区中的副本都将自动更新。
但似乎并非如此......至少不是这个推荐的代码。有什么我想念的吗?
答案 0 :(得分:0)
这取决于您删除对象的方式。如果您正在使用deleteEventually
,则删除将传播到LDS
您可以使用通过网络使用的完全相同类型的查询从本地数据存储区进行查询。结果将包括与已固定到您设备的查询匹配的每个对象。该查询甚至会考虑您对尚未保存到云端的对象所做的任何更改。例如,如果在对象上调用deleteEventually,将不再从这些查询中返回它。
但是如果你想要它可以工作,任何其他方法都需要明确的取消固定。
deleteEventually
是我认为的首选方法。