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 个对象。
有点棘手,如果有人遇到同样的问题,请随时留言,我会详细说明我的方法。 :)
我在我的项目中使用 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 个对象。
有点棘手,如果有人遇到同样的问题,请随时留言,我会详细说明我的方法。 :)