首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CloudKit中的批处理结果是“超出限制”。

CloudKit中的批处理结果是“超出限制”。
EN

Stack Overflow用户
提问于 2016-08-10 13:22:50
回答 1查看 1.6K关注 0票数 4

在CloudKit中,我试图通过批处理保存大量记录。但是,我的应用程序出现了以下错误:

推送本地数据时出错:中的最大项数多

这是我的密码:

代码语言:javascript
复制
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://stackoverflow.com/questions/26324643/cloudkit-your-request-contains-more-than-the-maximum-number-of-items-in-a-singl

https://forums.developer.apple.com/thread/11121

当我想使用CKModifyRecordsOperation在批处理中保存大量记录时,有什么方法可以消除这个限制呢?

EN

回答 1

Stack Overflow用户

发布于 2016-08-11 02:27:07

恐怕没有办法消除这个限制。你也不能指望它是400 -服务器可能决定拒绝任何大小的请求。

相反,按照苹果的建议,处理CKErrorLimitExceeded错误:将操作重构为多个较小的批(即多个CKModifyRecordsOperations)。

为了确保获取和保存记录的速度,服务器可能会拒绝大型操作。当发生这种情况时,一个块报告CKErrorLimitExceeded错误。您的应用程序应该处理此错误,并将操作重构为多个较小的批。

来源:CKModifyRecordsOperation类引用

因此,总结一下:

  1. 尝试一个包含要保存的批记录的CKModifyRecordsOperation。
  2. 如果操作返回CKErrorLimitExceeded,则将批记录拆分为多个较小的批,并将它们作为多个CKModifyRecordsOperations提交。(简单的拆分是将批处理分成两部分,但这取决于批处理中的新记录中是否有CKReferences。)
  3. 如果那些新的CKModifyRecordsOperations和CKErrorLimitExceeded失败了,把他们的记录.以此类推。
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38874712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档