CloudKit から取得する問題について、いくつかの CKQueryOperation の例/説明に従いました。私のテーブルには約 370 行と 8 列があります。せいぜい約 60 行しか取得できません。resultsLimit パラメータが役に立たないようです.. queryCompletionBlock が実行されていません。5 行をフェッチすることもあれば、30 以上の行をフェッチすることもあります クラウドからの応答は迅速です 今はすべての行です それは初心者のコードの間違いに違いありません!
func getData() {
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: RemoteFunctions.RemoteRecords.booksDB, predicate: predicate)
let cloudContainer = CKContainer.default()
let privateDatabase = cloudContainer.privateCloudDatabase
let operation = CKQueryOperation(query: query)
operation.queuePriority = .veryHigh
operation.resultsLimit = 20
operation.recordFetchedBlock = { (record: CKRecord) in
self.allRecords.append(record)
print(record)
}
operation.queryCompletionBlock = {[weak self] (cursor: CKQueryCursor?, error: NSError?) in
// There is another batch of records to be fetched
print("completion block called with \(String(describing: cursor))")
if let cursor = cursor {
let newOperation = CKQueryOperation(cursor: cursor)
newOperation.recordFetchedBlock = operation.recordFetchedBlock
newOperation.queryCompletionBlock = operation.queryCompletionBlock
newOperation.resultsLimit = 10
privateDatabase.add(newOperation)
print("more records")
}
// There was an error
else if let error = error {
print("Error:", error)
}
// No error and no cursor means the operation was successful
else {
print("Finished with records:")
}
} as? (CKQueryCursor?, Error?) -> Void
// privateDatabase.add(操作)
}