ios - RestKit - 一次处理一个 REST 操作

标签 ios objective-c core-data restkit restkit-0.20

我正在使用 RestKit 0.20.3 并且有一些 REST 操作需要按特定顺序完成(来自一个 REST 操作的响应需要包含在下一个请求参数映射中).

我尝试将队列设置为一次处理一个操作,如下所示:

RKObjectManager.sharedManager.operationQueue.maxConcurrentOperationCount = 1;

然后添加这样的操作:

for (id insertedObject in insertedObjects) {
    [RKObjectManager.sharedManager postObject:insertedObject path:nil parameters:nil success:nil failure:nil];
}

但是我得到一个错误,因为第一个操作在另一个开始之前没有完全完成。

检查日志时,好像是这样执行的:

  1. REST 操作 1 - 请求映射
  2. REST 操作 2 - 请求映射
  3. REST 操作 3 - 请求映射
  4. REST 操作 1 - HTTP 调用和响应映射
  5. REST 操作 2 - HTTP 调用和响应映射
  6. REST 操作 3 - HTTP 调用和响应映射

我已经尝试过设置操作依赖项,但这并没有什么不同。

我需要一次完成一个 REST 操作。我如何在 RestKit 中执行此操作?

最佳答案

问题

RestKit 对一个 REST 操作使用多个 NSOperation,因此所有请求映射将首先与问题中的代码一起排队。因此,当执行第一个请求映射并将实际 HTTP 请求排队时,它会排在前两个请求映射操作之后。

解决方案

在第一个操作完成后排队下一个操作。

递归示例:

- (void)sync {
    NSArray *objectsToPostInOrder = ...;

        for (id objectToPost in objectsToPostInOrder) {
            [RKObjectManager.sharedManager postObject:objectToPost path:nil parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
                // Proceed with next if everything went OK
                [self sync];
            } failure:^(RKObjectRequestOperation *operation, NSError *error) {
                // Don't continue posting as they are dependent on each other
                [MyHUD showErrorWithStatus:error.localizedDescription];
            }];

            return;
        }
    }
}

关于ios - RestKit - 一次处理一个 REST 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18993954/

相关文章:

ios - Apple Mach-O 链接器错误 - Xcode (Swift)

ios - CGGradient 3种颜色

iOS 通过本地通知显示特定的 View Controller

ios - 尝试在已经工作的项目中使用 OpenCV 框架时 Apple O-Linker 出错

ios - 删除托管对象后的核心数据故障

swift - 无法通过 API 将自定义对象保存到核心数据

ios - ObjC 到 Swift 将 NSDictionary 转换为 NSObject : AnyObject

ios - 在 ios 8 中将集合或表格 View 或自定义 View 添加到 ScrollView

ios - 从 iOS 中的主上下文重新加载私有(private)上下文

objective-c - XCode Floor "Min Value"和 "Max Value"是否用于核心数据十进制属性?