我试图使用PFRelations在PFUser和一些PFObject之间创建双向关系。
首先我创建一个Posting并将其保存在后台。 在完成块中,我通过附加到已与此用户相关的过帐列表在PFUser中添加新过帐,并使用同步保存调用重新保存用户。
始终使用与用户的正确关系正确保存过帐,但是,返回到用户中的过帐的关系仅会间歇性地起作用。逐步执行代码会导致每次都得到正确的结果,这使我相信它是某种竞争条件。什么会导致这种行为?有没有更好的方法来实现理想的关系?
PFUser *currentUser = [PFUser currentUser];
PFObject *posting = [PFObject objectWithClassName:@"Postings"];
__weak HLReviewPostItemViewController *myself = self;
posting[@"title"] = self.createdItem[@"title"];
posting[@"price"] = self.createdItem[@"price"];
posting[@"owner"] = currentUser;
[posting saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (!error) {
PFGeoPoint *currentGeoPoint = [myself.locationManager getCurrentGeoPoint];
[currentUser setObject:currentGeoPoint forKey:@"geoPoint"];
PFRelation *postingsForUser = [currentUser relationForKey:@"postings"];
[postingsForUser addObject:posting];
NSError *error;
[currentUser save:&error];
if (!error) {
[myself.dataManager fetchLocalUsers];
} else {
NSLog(@"Error saving Posting in user relation: %@", error);
}
} else {
NSLog(@"Error saving Posting: %@", error);
}
}];
答案 0 :(得分:0)
当您保存posting
时,因为posting
有一个存储owner
的列,所有者 - 父级也会自动保存 - 这是Parse非常好的功能。
当您单步执行代码时,自动保存将在您下次重新保存之前执行并完成。但是当您运行代码时,无法保证首先会保存到PFUser
对象。