我正在使用 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];
}
但是我得到一个错误,因为第一个操作在另一个开始之前没有完全完成。
检查日志时,好像是这样执行的:
- REST 操作 1 - 请求映射
- REST 操作 2 - 请求映射
- REST 操作 3 - 请求映射
- REST 操作 1 - HTTP 调用和响应映射
- REST 操作 2 - HTTP 调用和响应映射
- 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/