Core data CloudKit游标错误,无法返回所有行-在获取记录时遇到错误

Core data CloudKit游标错误,无法返回所有行-在获取记录时遇到错误,core-data,swift3,fetch,Core Data,Swift3,Fetch,我试图从CloudKit数据库表中检索所有记录,以便与数组进行比较。当我从CloudKit进行查询时,我得到了一个一般性错误。我通常会拿回一些唱片,但不是全套。该表只有大约6500条记录。使用true的谓词,即no谓词,我得到相同的错误。每次错误发生前返回的行数都不同 完全错误: <CKQuery: 0x618000423e40; recordType=ActionFigureSale, predicate=saleEndTime > CAST(422923500.000000, "

我试图从CloudKit数据库表中检索所有记录,以便与数组进行比较。当我从CloudKit进行查询时,我得到了一个一般性错误。我通常会拿回一些唱片,但不是全套。该表只有大约6500条记录。使用true的谓词,即no谓词,我得到相同的错误。每次错误发生前返回的行数都不同

完全错误:

<CKQuery: 0x618000423e40; recordType=ActionFigureSale, predicate=saleEndTime > CAST(422923500.000000, "NSDate")> errored for <CKError 0x60000085b6c0: "Internal Error" (1/1000); "Encountered an error fetching records">
CAST(422923500.000000,“NSDate”)>的错误
我曾尝试将resultLimit设置为1000,但在多次排队时多次出现相同的错误

        let publicDatabase = SharedData.sharedInstance.publicDatabase

        // let predicate = NSPredicate(value: true)
        let predicate = NSPredicate(format: "\(kSaleEndTime) > %@", saleEndTime)
        let query = CKQuery(recordType: kActionFigureSaleRecord, predicate: predicate)
        query.sortDescriptors = [NSSortDescriptor(key: kSaleSourceUniqueId, ascending: true)]

        var queryOperation = CKQueryOperation(query: query)
        queryOperation.queuePriority = .veryHigh
        queryOperation.resultsLimit = 10000

        var actionFigureItemSaleCloudRecordArray = Array<CKRecord>()
        var actionFigureItemSaleCloudArray = Array<ItemSale>()

        queryOperation.recordFetchedBlock = { (record) -> Void in
            actionFigureItemSaleCloudRecordArray.append(record)

            let actionFigureReference = record.object(forKey: kActionFigureReference) as! CKReference

            ...

            actionFigureItemSaleCloudArray.append(itemSaleItemCloud)
        }

        queryOperation.queryCompletionBlock = { (cursor, error) -> Void in

            if error != nil {
                DispatchQueue.main.async {
                    #if DEBUG
                        print("WARNING:  Action Figure Sale iCloud query \(query) errored for \(error!)")
                    #endif

                    completion(nil, error)
                    return
                }
            }

            if cursor != nil {
                let newQueryOperation = CKQueryOperation(cursor: cursor!)
                newQueryOperation.cursor = cursor
                newQueryOperation.resultsLimit = queryOperation.resultsLimit
                newQueryOperation.queryCompletionBlock = queryOperation.queryCompletionBlock

                queryOperation = newQueryOperation

                publicDatabase!.add(queryOperation)
                return

            }
            else {
                completion(actionFigureItemSaleCloudArray, nil)
                return
            }
        }

        publicDatabase!.add(queryOperation)
    }
让publicDatabase=SharedData.sharedInstance.publicDatabase
//let谓词=NSPredicate(值:true)
let predicate=NSPredicate(格式:“\(kSaleEndTime)>%@”,saleEndTime)
let query=CKQuery(记录类型:KactionFiguresAlerRecord,谓词:谓词)
query.sortDescriptors=[NSSortDescriptor(键:kSaleSourceUniqueId,升序:true)]
var queryOperation=CKQueryOperation(查询:查询)
queryOperation.queuePriority=.veryHigh
queryOperation.resultsLimit=10000
var actionFigureItemSaleCloudRecordArray=Array()
var actionFigureItemSaleCloudArray=Array()
queryOperation.recordFetchedBlock={(记录)->中的Void
actionFigureItemSaleCloudRecordArray.append(记录)
让actionFigureReference=record.object(forKey:kActionFigureReference)作为!CKReference
...
actionFigureItemSaleCloudArray.append(ItemSaleCloud)
}
queryOperation.queryCompletionBlock={(光标,错误)->中的Void
如果错误!=nil{
DispatchQueue.main.async{
#如果调试
打印(“警告:操作图销售iCloud查询\(查询)因\(错误!)出错”)
#恩迪夫
完成(无,错误)
返回
}
}
如果光标!=nil{
让newQueryOperation=CKQueryOperation(游标:游标!)
newQueryOperation.cursor=游标
newQueryOperation.resultsLimit=queryOperation.resultsLimit
newQueryOperation.queryCompletionBlock=queryOperation.queryCompletionBlock
queryOperation=newQueryOperation
publicDatabase!.add(查询操作)
返回
}
否则{
完成(actionFigureItemSaleCloudArray,无)
返回
}
}
公共数据库!。添加(查询操作)
}

我也遇到了同样的错误,我可以通过查看CKError中嵌套的userInfo来解决这个问题。以下代码是queryCompletionBlock中completionHandler的一部分:

if error is CKError {
    let ckerror = error as! CKError
    let info = ckerror.userInfo
    for inf in info {
        NSLog("User-Info:\(inf.key):\(inf.value)")
    }
    NSLog(error!.localizedDescription)
}
结果表明,我的queryOperation.resultsLimit的初始大小太高。我把它减少到400,错误就消失了