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)
你提交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)
归档时间: |
|
查看次数: |
2500 次 |
最近记录: |