限制CloudKit中返回的结果数量

Joj*_*dmo 7 ios swift cloudkit ckquery

有没有办法限制在CKQuery?中返回的结果数量?

SQL,可以运行像这样的查询SELECT * FROM Posts LIMIT 10,15.LIMIT 10,15在CloudKit中有什么类似查询的最后部分吗?

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

有一两件事,将工作是使用一个for循环,但是这将是非常密集的,因为我会从iCloud中选择所有的值,然后依次通过他们找出选择其中5,和我期待有在数据库中有很多不同的帖子,所以我只想加载那些需要的帖子.

我正在寻找这样的东西:

var limit: NSLimitDescriptor = NSLimitDescriptor(5, 10)
query.limit = limit

CKContainer.defaultContainer().publicCloudDatabase.addOperation(CKQueryOperation(query: query)
//fetch values and return them
Run Code Online (Sandbox Code Playgroud)

GoZ*_*ner 9

你提交CKQuery给了CKQueryOperation.所述CKQueryOperation具有概念cursor和的resultsLimit; 它们将允许您捆绑查询结果.如文档中所述:

要执行新搜索:

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)
Run Code Online (Sandbox Code Playgroud)