在CloudKit中,我试图通过批处理保存大量记录。但是,我的应用程序出现了以下错误:
推送本地数据时出错:中的最大项数多
这是我的密码:
CKModifyRecordsOperation *modifyRecordsOperation = [[CKModifyRecordsOperation alloc] initWithRecordsToSave:localChanges recordIDsToDelete: localDeletions];
modifyRecordsOperation.savePolicy = CKRecordSaveAllKeys;
modifyRecordsOperation.modifyRecordsCompletionBlock = ^(NSArray *savedRecords, NSArray *deletedRecordIDs, NSError *error) {
if (error) {
NSLog(@"[%@] Error pushing local data: %@", self.class, error);
}
};
[privateDatabase addOperation:modifyRecordsOperation];如果要获取记录,似乎可以通过在resultsLimit中设置CKQueryOperation来获得所有记录。
https://stackoverflow.com/questions/24191999/cloudkit-count-records
https://forums.developer.apple.com/thread/11121
当我想使用CKModifyRecordsOperation在批处理中保存大量记录时,有什么方法可以消除这个限制呢?
发布于 2016-08-11 02:27:07
恐怕没有办法消除这个限制。你也不能指望它是400 -服务器可能决定拒绝任何大小的请求。
相反,按照苹果的建议,处理CKErrorLimitExceeded错误:将操作重构为多个较小的批(即多个CKModifyRecordsOperations)。
为了确保获取和保存记录的速度,服务器可能会拒绝大型操作。当发生这种情况时,一个块报告CKErrorLimitExceeded错误。您的应用程序应该处理此错误,并将操作重构为多个较小的批。
来源:CKModifyRecordsOperation类引用
因此,总结一下:
CKErrorLimitExceeded,则将批记录拆分为多个较小的批,并将它们作为多个CKModifyRecordsOperations提交。(简单的拆分是将批处理分成两部分,但这取决于批处理中的新记录中是否有CKReferences。)CKErrorLimitExceeded失败了,把他们的记录.以此类推。https://stackoverflow.com/questions/38874712
复制相似问题