【发布时间】:2015-05-02 17:40:51
【问题描述】:
我正在尝试从在线后端以及本地数据存储加载对象。因此我使用了两个不同的查询。先在线查询:
PFQuery *onlineQuery = [PFQuery queryWithClassName:@"Trip"];
[onlineQuery whereKey:@"users" equalTo:[PFUser currentUser]];
[onlineQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
NSLog(@"Trips loaded from server!");
} else {
NSLog(@"Could not load trips from server!");
[onlineQuery cancel];
}
}];
本地数据存储的查询如下所示:
PFQuery *localQuery = [PFQuery queryWithClassName:@"Trip"];
[localQuery whereKey:@"users" equalTo:[PFUser currentUser]];
[localQuery fromLocalDatastore];
[localQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
// at this point the objects array is empty, but should contain objects
NSLog(@"Trips loaded from local datastore!");
}];
问题是,如果我进行在线查询,它会返回与当前用户相关的所有对象。但是本地查询为同一用户返回 0 个对象。我还检查了 currentUser 不为零。如果我删除[localQuery whereKey:@"users" equalTo:[PFUser currentUser]]; 行,本地查询将返回所有对象,这意味着它们已成功保存。此外,将对象保存到本地数据存储区时的方法返回它已成功保存。
PFObject *newTrip = [PFObject objectWithClassName:@"Trip"];
PFRelation *rel = [newTrip relationForKey:@"users"];
[rel addObject:[PFUser currentUser]];
[newTrip pinInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (succeeded) {
// succeeded is YES, therefore saving was succesful
NSLog(@"Trip saved to local datastore");
}
}];
【问题讨论】:
-
当前用户是进行固定的用户,那么您为什么要交叉引用呢?其他用户无法将某些内容固定到您的本地数据存储中
-
确实如此 :) 没想到...谢谢。
标签: ios parse-platform local-datastore