iOS 解析 PFQueryTableViewController 分页问题

iOS Parse PFQueryTableViewController pagination issue

我在我的项目中使用 PFQueryTableViewController,我刚刚发现了一个非常烦人的问题。

我正在使用分页,一切正常,但是当当前用户刚刚完成 loading/refreshing 的 table( 未加载下一页 ), 突然另一个用户创建了一个 post(我们称它为 object0),然后分页将无法按预期工作。例如,我在 Parse 服务器上有 100 个对象,objectsPerPage 设置为 10。这就是当前用户加载 table 后 table 的样子:

object1

object2

object3

...

object10

load next page

然后突然另一个用户做了一个 post "object0",当当前用户完成加载下一页时,table 看起来像这样:

object1

object2

...

object10

object10

object11

...

object 19

load next page

这给了我两个 "object10"。这是完全合理的,因为这是 loadNextPage 的 Parse 逻辑:

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

如你所见,当另一个用户创建了一个post(暂且称它为"object0"),服务器上将有101个对象,但table仍在显示从 "object1" 到 "object10" 因为它没有刷新。当当前用户正在加载第二页时(这不是刷新),服务器将跳过前 10 个对象("object0" 到 "object 9",而不是 1 到 10),因此第二页的结果将"object 10"到"object 19",因此,table中将有两个"object 10"。

有没有办法消除这个问题?

对不起,我的英语不好,如果您不确定我的意思,请在下面发表评论,我会进一步解释。

非常感谢。

我自己设法解决了。方法如下:

  • 创建一个名为 lastObject 的新 属性,这是查询 returns.
  • 的最后一个对象
  • 当查询执行无误后,更新 lastObject
  • 创建一个新查询,查询self.parseClassName,然后通过结果枚举,如果lastObject的objectId等于结果中的一个objectId,则设置query.skip = (index + 1)*page。其中 index 是结果数组中与 lastObject.
  • 匹配的对象的索引
  • 之后,每次我们调用 loadNextPage 时,查询应该 return 在 lastObject 之后的下 10 个对象。

有点棘手,如果有人遇到同样的问题,请随时留言,我会详细说明我的方法。 :)