【问题标题】:The Result of Batch Processing in CloudKit is "Limit Exceeded"CloudKit 中批处理的结果是“超出限制”
【发布时间】:2016-08-10 13:22:50
【问题描述】:

在 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];

如果我要获取记录,似乎可以通过在CKQueryOperation 中设置resultsLimit 来获取。

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的批处理中保存大量记录时,有没有办法消除限制?

【问题讨论】:

    标签: ios iphone cloudkit


    【解决方案1】:

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

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

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

    来源:CKModifyRecordsOperation Class Reference

    总结一下:

    1. 尝试 CKModifyRecordsOperation 与您要保存的记录批次。
    2. 如果操作返回CKErrorLimitExceeded,则将该批记录拆分为多个较小的批,并将它们作为多个CKModifyRecordsOperations 提交。 (简单的拆分是将批次分成两半,但这取决于批次中的新记录中是否有 CKReferences 等因素。)
    3. 如果这些新的 CKModifyRecordsOperations 中的任何一个以 CKErrorLimitExceeded 失败,则拆分它们的记录...等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2013-08-27
      相关资源
      最近更新 更多