CKQuery from private zone returns only first 100 CKRecords from in CloudKit

前端 未结 5 1870
遇见更好的自我
遇见更好的自我 2020-12-03 08:19

Is there any limit to the result of a query to Cloudkit private default zone? I have no clue why I only receive first 100 records with the following query:<

5条回答
  •  时光取名叫无心
    2020-12-03 09:02

    The simplest example for Swift:

    func fetchServices(completion: ErrorHandler? = nil) {
    
        var records = [CKRecord]()
    
        let query = CKQuery(recordType: "Service", predicate: NSPredicate(value: true))
        let queryOperation = CKQueryOperation(query: query)
    
        queryOperation.recordFetchedBlock = { record in
            records.append(record)
        }
    
        queryOperation.queryCompletionBlock = { cursor, error in
            self.fetchServices(with: cursor, error: error, records: records, completion: completion)
        }
    
        database.add(queryOperation)
    }
    
    private func fetchServices(with cursor: CKQueryCursor?, error: Swift.Error?, records: [CKRecord], completion: ErrorHandler? = nil) {
    
        var currentRecords = records
    
        if let cursor = cursor, error == nil {
    
            let queryOperation = CKQueryOperation(cursor: cursor)
            queryOperation.recordFetchedBlock = { record in
                currentRecords.append(record)
            }
    
            queryOperation.queryCompletionBlock = { cursor, error in
                self.fetchServices(with: cursor, error: error, records: currentRecords, completion: completion)
            }
    
            database.add(queryOperation)
    
        } else {
            parseAndSaveServices(with: records, completion: completion)
        }
    }
    

提交回复
热议问题