我有UIViewController
,其中包含一个tableview。我使用常规方法填充tableview。我使用名为loadEntries
的方法调用我的查询。
问题是loadEntries
的条目数量可能超过数万。
我宁愿不将我的ViewController更改为PFQueryTableViewController,如果有一种偷偷摸摸的方式从UIViewcontroller更改为PFQueryTableViewController,则可以进行异常。
所以我的问题是:是否可以用parse.com查询实现分页(不使用PFQueryTableViewController),如果是,怎么做?
答案 0 :(得分:10)
您需要查看skip
所提及的PFQuery
参数here in Parse's PFQuery Documentation。
您可以第一次运行查询作为计数,然后您将能够确定您将拥有多少页数据。
然后,您可以根据用户当前正在查看的“页面”,使用skip
和“count”值运行查询。
这样的事情:
- (void)countRecords {
PFQuery *query = [PFQuery queryWithClassName:@"className"];
// Other query parameters assigned here...
[query countObjectsInBackgroundWithBlock:^(int count, NSError *error) {
// Do better error handling in your app...
self.recordCount = count;
self.pageCount = count / self.recordsPerPage + 1;
[self loadRecordsForPageIndex:0 countPerPage:self.recordsPerPage];
}];
}
- (void)loadRecordsForPageIndex:(NSInteger)pageIndex countPerPage:(NSInteger)count {
PFQuery *query = [PFQuery queryWithClassName:@"className"];
// Other query parameters assigned here...
query.limit = count;
query.skip = pageIndex * count;
[query findObjects... // You should know this part
}
在上面的示例中,-countRecords
获取与您的查询匹配的记录的当前计数,然后自动调用-loadRecordsForPageIndex:countPerPage:
。稍后,当用户在数据页面之间导航时,您将再次调用它,传入新的pageIndex
和count
(每页记录数)值。你可以重构这个,以便继续引用self.recordsPerPage
作为它的实例变量。
直接来自Parse.com:
警告:计数查询的速率限制为每分钟最多160个请求。它们还可以为具有1,000个以上对象的类返回不准确的结果。因此,最好设计您的应用程序以避免这种计数操作(例如,通过使用计数器。)
MY CAVEATS:
limit
的默认值为100。limit
允许的最大值为1,000。 skip
的默认值为0(零)。skip
允许的最大值为10,000。createdAt
或其他东西获得高级和搜索,但这些实例将是PFQuery
具有不同约束的实例。)