Как получить родительский объект из отношения в синтаксическом анализе

#ios #parse-platform

#iOS #синтаксический анализ-платформа

Вопрос:

Допустим, у меня есть родительский класс, который имеет отношение «один ко многим» к дочернему классу целевого класса. Как родительский, так и дочерний объекты не создаются пользователем, я создаю эти объекты в браузере данных, и я не знаю, как установить связь или указатель на дочерний объект обратно на его конкретного родителя. Я могу получить дочерние объекты родительского объекта без проблем. Но как я могу получить родительский объект дочернего объекта? Я не хочу продолжать передавать как родительский, так и дочерний объекты из VC в VC. Еще раз, оба объекта НЕ созданы пользователем, поэтому я не могу сделать:

 [Parent setObject:Child forKey:"child"];
  

а затем запросить родительский класс следующим образом:

 [query whereKey:@"child" isEqualTo:Child];
  

Также запрос всех родителей и их отношений, а затем получение этого конкретного дочернего элемента и затем возврат к родительскому элементу кажутся излишними.

Итак, как я могу установить конкретного родителя для дочернего объекта в браузере данных, чтобы он указывал обратно на родителя? И как получить этот родительский объект из кода, если я хочу использовать только дочерний объект?

Ответ №1:

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

Просто добавьте parent столбец к Child , который имеет тип Pointer<Parent> .

Чтобы получить все дочерние элементы родительского объекта, вы просто выполняете запрос:

 [childQuery whereKey:@"parent" isEqualTo:parent];
  

Запросить дочерний объект, а также получить родительский:

 [childQuery includeKey:@"parent"];
// filter as needed
  

В блоке, который выглядит дочерним, вы можете просто использовать:

 PFObject *parent = child[@"parent"];
  

Он будет полностью заполнен Parent из-за includeKey: .

ПРИМЕЧАНИЕ: если вы сохраняете оба отношения, создание новых объектов становится сложнее, поскольку вам придется сохранить родительский / дочерний (с child.parent unset), затем обновить дочерний объект, чтобы указать на родительский, и сохранить его снова.