使用常规 UIViewController 分页解析查询

Paginate parse queries using a regular UIViewController

我有一个 UIViewController,里面有一个表格视图。我使用常规方法填充表格视图。我使用名为 loadEntries 的方法调用我的查询。

问题是 loadEntries 的条目数量可能超过数万。

我不想将我的 ViewController 更改为 PFQueryTableViewController,如果有从 UIViewcontroller 更改为 PFQueryTableViewController 的偷偷摸摸的方法,则可以例外。

所以我的问题是:是否可以使用 parse.com 查询实现分页(不使用 PFQueryTableViewController),如果可以,如何实现?

您需要查看 PFQueryskip 参数,如讨论的那样 here in Parse's PFQuery Documentation

您可以 运行 第一次查询只是一个计数,然后您将能够确定您将拥有多少页数据。

然后,您可以根据 "page" 用户当前正在查看的内容 运行 使用 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:。稍后,当用户在数据页面之间导航时,您将再次调用它,传入新的 pageIndexcount(每页记录数)值。您可以重构它以继续引用 self.recordsPerPage 作为实例变量。

直接来自Parse.com:

Caveat: Count queries are rate limited to a maximum of 160 requests per minute. They can also return inaccurate results for classes with more than 1,000 objects. Thus, it is preferable to architect your application to avoid this sort of count operation (by using counters, for example.)

我的注意事项:

  1. limit 的默认值为 100。
  2. limit 的最大允许值为 1,000。
  3. skip 的默认值为 0(零)。
  4. skip 的最大允许值为 10,000。
  5. 因此,您无法通过一个未经修改的查询可靠地查询超过 11,000 个对象。 (您可以使用 createdAt 或其他方式进行高级搜索,但这些将是具有不同约束的 PFQuery 个实例。)