限制CloudKit中返回的结果数量

有没有办法限制CKQuery中返回的结果CKQuery

SQL ,可以运行SELECT * FROM Posts LIMIT 10,15类的查询。 是否有类似查询的最后部分,CloudKit中的LIMIT 10,15

例如,我想加载前5个结果,然后,一旦用户向下滚动,我想加载接下来的5个结果,依此类推。 在SQL中,它将是LIMIT 0,5 ,然后是LIMIT 6,10 ,依此类推。

一个可行的方法是使用for循环,但它会非常密集,因为我必须从iCloud中选择所有值,然后循环遍历它们以找出要选择的5个,我期待数据库中有很多不同的post,所以我只想加载那些需要的post。

我正在寻找这样的东西:

 var limit: NSLimitDescriptor = NSLimitDescriptor(5, 10) query.limit = limit CKContainer.defaultContainer().publicCloudDatabase.addOperation(CKQueryOperation(query: query) //fetch values and return them 

您将CKQuery提交给CKQueryOperationCKQueryOperation具有cursorresultsLimit概念; 它们将允许您捆绑查询结果。 如文档中所述:

要执行新搜索:

1)使用CKQuery对象初始化CKQueryOperation对象,该对象包含所需记录的搜索条件和排序信息。

2)将一个块分配给queryCompletionBlock属性,以便您可以处理结果并执行操作。

如果搜索产生许多记录,则操作对象可以立即将总结果的一部分传递给块,以及用于获取剩余记录的游标。 如果提供了游标,则在准备好处理下一批结果时,使用它来初始化并执行单独的CKQueryOperation对象。

3)通过指定resultsLimit和desiredKeys属性的值,可以选择配置返回结果。

4)将查询操作对象传递给目标数据库的addOperation:方法,以对该数据库执行操作。

所以它看起来像:

 var q = CKQuery(/* ... */) var qop = CKQueryOperation (query: q) qop.resultsLimit = 5 qop.queryCompletionBlock = { (c:CKQueryCursor!, e:NSError!) -> Void in if nil != c { // there is more to do; create another op var newQop = CKQueryOperation (cursor: c!) newQop.resultsLimit = qop.resultsLimit newQop.queryCompletionBlock = qop.queryCompletionBlock // Hang on to it, if we must qop = newQop // submit ....addOperation(qop) } } ....addOperation(qop)