Core data CloudKit游标错误,无法返回所有行-在获取记录时遇到错误
我试图从CloudKit数据库表中检索所有记录,以便与数组进行比较。当我从CloudKit进行查询时,我得到了一个一般性错误。我通常会拿回一些唱片,但不是全套。该表只有大约6500条记录。使用true的谓词,即no谓词,我得到相同的错误。每次错误发生前返回的行数都不同 完全错误: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, "
<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,错误就消失了