【发布时间】:2017-06-03 23:08:45
【问题描述】:
我正在尝试从 CloudKit 数据库表中检索所有记录,以便与数组进行比较。当我从 CloudKit 进行查询时,出现一般错误。我通常会拿回一些记录,但不是全套。该表只有大约 6500 条记录。使用 true 的谓词,即没有谓词,我得到同样的错误。每次出错前返回的行数都不一样。
完全错误:
<CKQuery: 0x618000423e40; recordType=ActionFigureSale, predicate=saleEndTime > CAST(422923500.000000, "NSDate")> errored for <CKError 0x60000085b6c0: "Internal Error" (1/1000); "Encountered an error fetching records">
我尝试将 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)
}
【问题讨论】: