我使用下面的代码来启动N个请求,其中每个请求都是由两个必须手持的请求组成的(我不关心阻止UI,因为我希望应用程序被阻止):restkit中的操作顺序
objectManager.operationQueue.maxConcurrentOperationCount = 1;
for (int i = 0; i< n; i++)
{
[objectManager postObject:reqObj
path:@"sync.json"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
[operation waitUntilFinished];
// Do something and then send the second request
[self sendAck];
} // end success
failure:^(RKObjectRequestOperation *operation, NSError *error) {}
];
}
而第二个要求是非常相似:
-(void)sendAck
{
[objectManager postObject:reqObj
path:@"sync.json"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
[operation waitUntilFinished];
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {}
]
}
但在检查服务器的日志后,我意识到,所有的“ACK的”,我的意思是所有的第二请求来毕竟第一次请求。结果显然不正确。 如果请求i已启动,那么在发送i + 1请求之前,我们必须等待第二个请求完成。那就是:
req. i, second req. on i, req. i+1, second req. on i+ 1,...
,而不是
req .i ,req. i+1, ....., second req. on i, second req. on i+1
使用操作队列是错误还是我失去了一些东西?
_“我不在乎阻止用户界面,因为我想阻止应用程序”_用户不会 - 苹果可能会拒绝它。 – CouchDeveloper
'[operation waitUntilFinished]'可能没有效果,因为当完成处理程序将被执行时,操作总是完成。我想念什么? – CouchDeveloper
该操作是一个同步过程,不能被阻止。 – giuseppe