BB-*_*B-8 4 iphone ios cloudkit
在 CloudKit 中,我尝试通过批处理来保存大量记录。但是,我的应用程序因以下错误而崩溃:
推送本地数据时出错:<CKError 0x15a69e640: "Limit Exceeded" (27/1020); “您的请求包含 561 个项目,超过单个请求中的最大项目数 (400)">
这是我的代码:
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];
Run Code Online (Sandbox Code Playgroud)
如果我要获取一条记录,似乎所有内容都可以通过设置resultsLimitin来获得CKQueryOperation。
https://forums.developer.apple.com/thread/11121
当我想在批处理中使用 保存大量记录时CKModifyRecordsOperation,有没有办法消除限制?
恐怕没有办法消除这个限制。而且您也不能指望它是 400 - 服务器可能会决定拒绝任何大小的请求。
相反,CKErrorLimitExceeded按照 Apple 的建议处理错误:将操作重构为多个较小的批次(即多个 CKModifyRecordsOperations)。
为保证获取和保存记录的速度,服务器可能会拒绝大型操作。发生这种情况时,块会报告 CKErrorLimitExceeded 错误。您的应用程序应处理此错误,并将操作重构为多个较小的批次。
来源:CKModifyRecordsOperation 类参考
所以总结一下:
CKErrorLimitExceeded,则将这批记录拆分为多个较小的批次,并将它们作为多个 CKModifyRecordsOperations 提交。(一个简单的拆分就是将批次分成两半,但这取决于诸如批次中的新记录中是否有 CKReferences 等因素。)CKErrorLimitExceeded,则拆分它们的记录......等等。| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |