PFQueryTableViewController с использованием объектов в массиве PFObject
Извините, если это чрезвычайно простой и глупый вопрос. Я все еще новичок в разборе.
Предположим, у меня есть объект Schedule, а объект Schedule может иметь несколько объектов ScheduleItem (не много). Я решил смоделировать это, используя массивы для отношений, такие как:
PFObject *first = ...
PFObject *second = ...
PFObject *third = ...
PFObject *schedule = [PFObject objectWithClassName:@Schedule"];
schedule[@"scheduleItems"] = @[first, second, third];
Предположим, я хочу позже запросить эти ScheduleItems, которые принадлежат этому расписанию, и использовать его в PFQueryTableViewController. Я не могу просто запросить это расписание и получить доступ к его элементам через массив, потому что PFQueryTableViewController использует результаты PFQuery в качестве источника данных для табличного представления. И я не уверен, как запросить "объекты ScheduleItem, которые живут в массиве" scheduleItems "в конкретном объекте Schedule". Я вижу метод запроса whereKey:containedIn:
, но это не совсем похоже, потому что у меня нет ссылки на этот массив, прежде чем я сделаю запрос. Похоже, мне нужно сделать какой-то вложенный / составной запрос, потому что для части этого запроса мне нужно запросить объект Schedule, но я не уверен, как именно это работает.
РЕДАКТИРОВАТЬ: чтобы уточнить этот вопрос. Предположим, объект "Расписание" имеет имя "Сегодня". Я знаю, что могу создать запрос для этого объекта Schedule и сказать ему включить поле "scheduleItems":
PFQuery *query = [PFQuery queryWithClassName:@"Schedule"];
[query whereKey:@"name" equalTo:@"Today"]; // or query by its objectId
[query includeKey:@"scheduleItems"];
Я знаю, что если я выполню этот запрос с чем-то вроде findObjectsInBackgroundWithBlock:
результат прямого запроса - это массив из одного объекта, объекта Schedule, со всеми элементами ScheduleItems, доступными через поле scheduleItems.
Моя проблема в том, что я не хочу выполнять этот запрос сам - я хочу использовать эти ScheduleItems в качестве ячеек в PFQueryTableViewController, который предполагает взаимно-однозначное сопоставление между ячейками и объектами результата прямого запроса. Если я использую приведенный выше запрос с PFQueryTableViewController, результатом прямого запроса является массив из одного объекта, то есть таблица имеет только один объект. Короче говоря, я не знаю, как сказать PFQueryTableViewController выполнить запрос, но затем использовать связанный с ним массив объектов для заполнения таблицы.
1 ответ
Ваш выбор использования массива вместо отношения идеально подходит для вашего случая использования. Из-за этого вы можете указать
[query includeKey:@"scheduleItems"];
после создания запроса укажите, что он должен включать, встроенный и не требующий второго сетевого запроса, сведения об объектах в массиве.
Помните, что количество объектов в массиве должно быть небольшим, чтобы избежать проблем с производительностью и размером.