Разобрать редактируемый объект после реляционного запроса

В моем приложении пользователь создает 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, специфичный для пользователя, получить его и отредактировать.

Если у вас есть какие-либо предложения, я весь слушаю! Спасибо!

EDIT: я понял, как сохранить запрошенный объект, используя

[PFObject saveAllInBackground:objects];

Но я все еще не могу получить объекты, связанные с текущим пользователем.


person Jack    schedule 11.11.2014    source источник


Ответы (1)


Глядя на ваш код создания предупреждений, у вас есть связь 1: m между пользователем- > предупреждениями (как ни странно, через поле PFUser 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];

to

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

Если вы сделаете это, ваш исходный код запроса должен работать, так как теперь устанавливается отношение пользователя к оповещениям.

person rickerbh    schedule 11.11.2014
comment
Спасибо, я попробую это, когда я вернусь домой. - person Jack; 11.11.2014
comment
Спасибо, я только что изменил отношение, в котором создавался объект, и это сработало! - person Jack; 12.11.2014