0

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(操作)

}
4

2 に答える 2