我使用下面的代碼來啓動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