在关系查询后解析编辑对象

时间:2014-11-11 19:23:42

标签: ios parse-platform ios8 pfquery pfobject

在我的应用程序中,用户在警报类中创建一个与当前用户有关系的PFObject。我想检索并编辑它。

添加对象:

PFUser *user = [PFUser currentUser];
PFObject *alarm = [PFObject objectWithClassName:@"Alerts"];
alarm[@"Active"] = @YES;
alarm[@"ActionWasCompleted"] = @NO;
alarm[@"Time"] = _alarmTime;

PFRelation *relation = [user relationForKey:@"user"];
[relation addObject:user];
[alarm saveInBackground];

检索用户特定对象并对其进行编辑:

PFQuery *query = [PFQuery queryWithClassName:@"Alerts"];
[query whereKey:@"user" equalTo:[PFUser currentUser]];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        NSLog(@"Successfully retrieved %d objects.", objects.count);
        [[objects objectAtIndex:0] setObject:@YES forKey:@"ActionWasCompleted"];
    } else {
        // Log details of the failure
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
}];

现在我在编辑之前已经使用了关系查询,但我甚至无法检索与当前用户相关的警报类中的对象。更别说编辑对象了。我不知道自己做错了什么。

我想做的就是创建一个特定于用户的PFObject,检索并编辑它。

如果您有任何建议我全都耳朵!谢谢!

修改 我想出了如何使用

保存查询对象
[PFObject saveAllInBackground:objects];

但我仍然无法检索与当前用户相关的对象。

1 个答案:

答案 0 :(得分:2)

查看您的警报创建代码,您在用户 - >警报之间存在1:m的关系(奇怪的是,通过PFUser的{​​{1}}字段),但与警报没有任何关系 - &gt ;用户(如果你这样做,它没有设置)。您仍然可以查询给定用户的所有警报,但您必须通过用户查询而不是通过警报进行查询。

此外,您可能想要检查关系 - 看起来您的user有一个名为“user”的字段,您将其用作与警报的关系。我建议将其重命名为警报,这样就可以清楚地知道这种关系是什么了。

PFUser

另一个想法 - 如果您希望通过名称用户的关系字段在警报上设置与用户的关系,则应更改从

添加代码的对象
PFRelation *alertsRelation = [[PFUser currentUser] relationForKey:@"user"]; // Should rename the relation on the user so it's clear what it's a relation to
PFQuery *alertsQuery = [alertsRelation query];
[alertsQuery findObjectsInBackgroundWithBlock:^(NSArray *alerts, NSError *error) {
  // alerts now contains the the Alerts for the current PFUser
}];

PFRelation *relation = [user relationForKey:@"user"];
[relation addObject:user];
[alarm saveInBackground];

如果您这样做,那么原始查询代码应该可以正常工作,因为现在正在设置警报上的用户关系。