У меня есть функция Parse Cloud Code, которая представляет собой простой запрос для запроса корневого объекта и получения его дочерних объектов и их дочерних объектов (3 уровня иерархии объектов).
Set
|--> Group
|--> Item
Я делаю это таким образом, потому что Set
уже может быть на устройстве, и я не могу найти надежный способ убедиться, что у меня есть последняя копия. fetchInBackground...
может сработать, за исключением того, что вы не можете сделать include
, которое мне нужно сделать, чтобы получить детей/внуков. (Я не могу понять, почему Parse не добавил эту функцию. Я не могу сказать вам, сколько раз я хотел сказать «обновить этот объект, включая эти дочерние объекты»!)
В любом случае, функция Cloud Code работает, но выдает странные результаты:
- Когда я запускаю запрос из консоли REST API, я получаю все ожидаемые данные. В частности, я получаю 1 объект
Set
, 3 объектаGroup
, принадлежащих этому набору, и объектыItem
, принадлежащие каждомуGroup
. В частности, 3-йGroup
изSet
содержит 67Item
объектов. - Когда я запускаю запрос с устройства iOS (или симулятора), третий
Group
последовательно возвращается с 51Item
объектами. Интересно, что это БЫЛО верно до обновления модели данных на сервере.
Итак, несмотря на все мои усилия, я не могу обновить модель данных, закрепленную на моем устройстве, чтобы отразить изменения, внесенные на сервере. Что меня ДЕЙСТВИТЕЛЬНО сбило с толку, так это то, что, несмотря на вызов функции облачного кода, модель данных на устройстве возвращается.
Я предполагаю, что когда объект возвращается из функции, она видит, что объект уже закреплен и не включает новые данные с сервера. Чего я не могу понять, так это как обойти это. Я хочу, чтобы данные были закреплены, потому что я не хочу управлять своим собственным локальным хранилищем данных (хотя, думаю, при необходимости я это сделаю). Я пытался открепить объект Set
непосредственно перед вызовом функции Cloud Code, но это не меняет результатов, даже если я запускаю вызов unpin
синхронно.
Я только что потратил несколько часов, пытаясь сделать свою собственную последовательность обновления, например:
- Обновить
Set
- Повторить
Group
объектовSet
, обновив их - Перебрать
Item
объектов каждогоGroup
, обновив их.
Хотя это, кажется, работает хорошо, когда процесс выполняется, как только я дохожу до конца процесса, данные 2-го и 3-го уровня не сохраняются.
Я чувствую, что это должна быть тривиальная реализация. Многие просили об этой функции. Кто-нибудь понял, как выполнить «выборку с включением»?