2016-04-07 73 views
0

我正在使用Restkit(0.20.3),編譯到iPhone 5s(8.4)模擬器上。已運行請求/映射的Restkit「cancelAllObjectRequestOperationsWithMethod」

所以我見過很多關於「cancelAllObjectRequestOperationsWithMethod」的帖子以取消請求。我目前有一個帶有大型JSON包的請求,需要幾秒鐘才能映射到CoreData。用戶可以選擇通過按鈕手動取消請求。

如果我的理解是正確的,這個「cancelAllObjectRequestOperationsWithMethod」應該停止請求,即使它正在運行?如果沒有,那麼我的問題是如何去做這件事。但是,如果這應該停止當前的操作,那麼基於日誌,它似乎沒有工作,因爲我仍然可以看到許多用於映射API的打印語句。

這裏是我的開始API代碼:

@try{ 
     [[RKObjectManager sharedManager] getObjectsAtPath:path 
               parameters:nil 
                success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {}              failure:^(RKObjectRequestOperation *operation, NSError *error) {} 
@catch(NSException *e) { 
    NSLog(@"%@", e); 
} 

這裏是我的取消代碼,當用戶按下按鈕:

NSLog(@"%@", [[RKObjectManager sharedManager] enqueuedObjectRequestOperationsWithMethod:RKRequestMethodAny matchingPathPattern:path]); 
[[RKObjectManager sharedManager] cancelAllObjectRequestOperationsWithMethod:RKRequestMethodAny matchingPathPattern:path]; 
NSLog(@"%@", [[RKObjectManager sharedManager] enqueuedObjectRequestOperationsWithMethod:RKRequestMethodAny matchingPathPattern:path]); 

第一的NSLog顯示state: Executing, isCancelled=NO

第二NSLog顯示state: Executing, isCancelled=YES

S o我已經成功取消取消,但映射仍會繼續顯示在我的日誌中。當時是否有可能停止執行執行

回答

0

它會停止,但不會立即。日誌還需要時間來打印,並且來自多個不同的線程,因此您無法100%依賴某些項目的順序。

當您取消某個操作時,您只需設置一個標誌,則需要檢查該標誌並停止操作。每個操作都會根據他們所做的工作以及他們的工作方式選擇不同的時間(或一組時間)。因此,無論內部取消任何操作都會完成,然後稍後停止。

其中一個關鍵的問題是未來取消的操作甚至不會啓動,當前取消的操作不會調用完成處理程序。