不一致的结果在PFUser和PFObject之间创建双向关系

时间:2014-12-10 08:00:07

标签: parse-platform

我试图使用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);
    }
}];

1 个答案:

答案 0 :(得分:0)

当您保存posting时,因为posting有一个存储owner的列,所有者 - 父级也会自动保存 - 这是Parse非常好的功能。

当您单步执行代码时,自动保存将在您下次重新保存之前执行并完成。但是当您运行代码时,无法保证首先会保存到PFUser对象。