Проблема разбивки на страницы iOS Parse PFQueryTableViewController

Я использую PFQueryTableViewController в своем проекте и только что обнаружил довольно неприятную проблему.

Я использую разбиение на страницы, все работает нормально, но когда текущий пользователь только что закончил загрузку/обновление таблицы (не загружает следующую страницу), вдруг другой пользователь делает сообщение (назовем его object0 ), то разбиение на страницы не будет работать должным образом. Например, у меня есть 100 объектов на сервере Parse, а objectsPerPage установлено на 10. Вот как выглядит таблица после того, как текущий пользователь загрузил таблицу:

объект1

объект2

объект3

...

объект10

загрузить следующую страницу

Затем вдруг другой пользователь делает сообщение «object0», и когда текущий пользователь завершает загрузку следующей страницы, таблица выглядит так:

объект1

объект2

...

объект10

объект10

объект11

...

объект 19

загрузить следующую страницу

что дает мне два "object10". И это совершенно разумно, потому что это логика Parse для loadNextPage :

query.limit = self.objectsPerPage; //retrieve 10 objects per query
query.skip = page * self.objectsPerPage; //skip 10*current_page objects per query 

Как вы можете видеть, когда другой пользователь создает сообщение (назовем его «object0»), на сервере будет 101 объект, но таблица по-прежнему отображается от «object1» до «object10», потому что она не обновляется. И когда текущий пользователь загружает вторую страницу (это не обновление), сервер пропустит первые 10 объектов («объект0» до «объекта 9», а не от 1 до 10), поэтому результат для второй страницы будет " объект 10" на "объект 19", таким образом, в таблице будет два "объекта 10".

Есть ли способ устранить эту проблему?

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

Большое спасибо.


person One Eyed Raven    schedule 22.10.2016    source источник


Ответы (1)


Мне удалось решить это самостоятельно. Вот подход:

  • Создайте новое свойство с именем lastObject, которое является последним объектом, возвращаемым запросом.
  • Когда запрос выполнился без ошибок, обновите файл lastObject.
  • Создайте новый запрос, который запрашивает self.parseClassName, а затем перечислите результат, если objectId lastObject равен objectId в результате, затем установите query.skip = (index + 1)*page. где index — это индекс объекта в результирующем массиве, который соответствует lastObject.
  • После этого каждый раз, когда мы вызываем loadNextPage, запрос должен возвращать следующие 10 объектов сразу после lastObject.

Это немного сложно, если кто-то сталкивается с той же проблемой, не стесняйтесь, напишите сообщение, и я подробно объясню свой подход. :)

person One Eyed Raven    schedule 22.10.2016