CloudKit 中的记录不能超过 100 条
Can't have more than 100 records in CloudKit
我尝试了很多不同的方法来获取记录,并在 Whosebug 上检查了同样的问题,但不能获取超过 100 条记录。
之前,我使用 CKQuery 而不是 CKQueryOperation 来使用 resultsLimit
参数。
这是我的代码:
func initData(){
// show activity indicator
self.activityIndicatorView.hidden = false
// hide connection error button
self.connectionErrorButton.hidden = true
let container = CKContainer.defaultContainer()
let publicDB = container.publicCloudDatabase
let predicate = NSPredicate(value: true)
let sort = NSSortDescriptor(key: "id", ascending: true)
var newInfo = Array<CKRecord>()
let query = CKQuery(recordType: "info", predicate: predicate)
query.sortDescriptors = [sort]
let queryOperation = CKQueryOperation(query: query)
queryOperation.queuePriority = .VeryHigh
queryOperation.resultsLimit = 150;
// Fetch the pokemons for the record
func fetched(record: CKRecord!) {
newInfo.append(record)
}
queryOperation.recordFetchedBlock = fetched
queryOperation.queryCompletionBlock = { [unowned self] (cursor, error) in
if (error != nil) {
dispatch_async(dispatch_get_main_queue()) {
self.connectionErrorButton.hidden = false
self.activityIndicatorView.hidden = true
return
}
} else {
dispatch_async(dispatch_get_main_queue()) {
self.infos.removeAll()
self.infos = newInfo
self.tableView.reloadData()
self.activityIndicatorView.hidden = true
return
}
}
}
publicDB.addOperation(queryOperation)
}
在 iOS 9.3 及以下版本中,您需要使用 CKQueryCursor
执行多个提取操作并跟踪您在提取中的位置。那是在完成块中传回的游标对象,您可以用它创建另一个操作,它将从您离开的地方开始,如下所示:
queryOperation.queryCompletionBlock = { (cursor, error) in
if let cursor = cursor {
let cursorOperation = CKQueryOperation(cursor: cursor)
cursorOperation.queryCompletionBlock = //Handle it again
}
//Do stuff
}
在使用游标时,您通常会希望制作可重用的处理程序块,这样您就可以在多个游标到达时递归地创建基于游标的查询操作。
我尝试了很多不同的方法来获取记录,并在 Whosebug 上检查了同样的问题,但不能获取超过 100 条记录。
之前,我使用 CKQuery 而不是 CKQueryOperation 来使用 resultsLimit
参数。
这是我的代码:
func initData(){
// show activity indicator
self.activityIndicatorView.hidden = false
// hide connection error button
self.connectionErrorButton.hidden = true
let container = CKContainer.defaultContainer()
let publicDB = container.publicCloudDatabase
let predicate = NSPredicate(value: true)
let sort = NSSortDescriptor(key: "id", ascending: true)
var newInfo = Array<CKRecord>()
let query = CKQuery(recordType: "info", predicate: predicate)
query.sortDescriptors = [sort]
let queryOperation = CKQueryOperation(query: query)
queryOperation.queuePriority = .VeryHigh
queryOperation.resultsLimit = 150;
// Fetch the pokemons for the record
func fetched(record: CKRecord!) {
newInfo.append(record)
}
queryOperation.recordFetchedBlock = fetched
queryOperation.queryCompletionBlock = { [unowned self] (cursor, error) in
if (error != nil) {
dispatch_async(dispatch_get_main_queue()) {
self.connectionErrorButton.hidden = false
self.activityIndicatorView.hidden = true
return
}
} else {
dispatch_async(dispatch_get_main_queue()) {
self.infos.removeAll()
self.infos = newInfo
self.tableView.reloadData()
self.activityIndicatorView.hidden = true
return
}
}
}
publicDB.addOperation(queryOperation)
}
在 iOS 9.3 及以下版本中,您需要使用 CKQueryCursor
执行多个提取操作并跟踪您在提取中的位置。那是在完成块中传回的游标对象,您可以用它创建另一个操作,它将从您离开的地方开始,如下所示:
queryOperation.queryCompletionBlock = { (cursor, error) in
if let cursor = cursor {
let cursorOperation = CKQueryOperation(cursor: cursor)
cursorOperation.queryCompletionBlock = //Handle it again
}
//Do stuff
}
在使用游标时,您通常会希望制作可重用的处理程序块,这样您就可以在多个游标到达时递归地创建基于游标的查询操作。