0

在我的应用程序中,用户在与当前用户相关的警报类中创建了一个 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];

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

4

1 回答 1

2

查看您的警报创建代码,您在 User->Alerts 之间有 1:m 关系(奇怪的是,通过PFUser'suser字段),但与 Alerts->User 没有关系(或者如果您这样做,它没有设置)。您仍然可以查询给定用户的所有警报,但您必须通过用户而不是警报进行查询。

此外,您可能想要检查关系 - 看起来您PFUser有一个名为“用户”的字段,您将其用作与警报的关系。我建议将其重命名为 Alerts,以便清楚它们之间的关系。

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
}];

只是另一个想法-如果您希望通过名称 user 的关系字段在警报上设置您与用户的关系,您应该更改您的对象添加代码

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

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

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

于 2014-11-11T20:31:00.110 回答