我试图从在线后端以及从本地数据存储中加载对象。因此我使用了两个不同的查询。首先,网上查询:使用[PFUser currentUser]在本地数据存储上查询时不返回对象
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个对象。我也检查过当前用户不是零。如果我删除行[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");
}
}];
当前用户是一个做固定的人,那么为什么你需要交叉引用呢?另一个用户不能把东西钉到你的本地数据存储 – soulshined 2015-03-02 16:36:09
这实际上是真的:)没有想到这一点......感谢。 – gpichler 2015-03-02 16:37:48