2014-01-30 19 views
0

我想在再次運行請求時停止/取消操作。方法cancelAllHTTPOperationsWithMethod工作正常,但是當AFNetworking已經提取結果並且我的successBlock被解僱時我有問題 - 我想在最近的將來停止它。但問題是,operation.isCancelled不會被取消。AFNetworking cancel successBlock

問題是我是否必須在NSOperation中執行「非常長的successBlock」並取消它們,或者有沒有更簡單快捷的方法?

代碼:

[[AFHTTPClient sharedInstance] cancelAllHTTPOperationsWithMethod:@"GET" path:@"path"]; 
[[AFHTTPClient sharedInstance] getPath:@"path" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 
     for (longLoop) { 
      // do something long 
      if (self.isCancelled) return; // this won't fire no matter how often i run it 
     } 
    }); 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    // do something to fail 
}]; 
+0

你能夠在該循環中測試'operation.isCancelled'。你說「operation.isCancelled沒有取消」,但這並不意味着什麼。重點是,它是*設置*? – trojanfoe

+0

@trojanfoe那麼,這是我的問題和我的問題。我期望它被設置,因爲我早些時候調用'cancelAllHTTPOperationsWithMethod'(我粘貼的代碼在循環中可以說),但是如果successBlock開始運行,那麼即使我通過cancelAllHTTPOperationsWithMethod取消它, t改變 – Vive

+0

那麼爲什麼'self.isCancelled'的測試呢? – trojanfoe

回答

0

我裏面做NSOperation結束。例如:

[[AFHTTPClient sharedInstance] cancelAllHTTPOperationsWithMethod:@"GET" path:@"path"]; 
[operationQueue cancelAllOperations]; 

[[AFHTTPClient sharedInstance] getPath:@"path" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    // add new operation 
    MyOperation *successOperation = [[MyOperation alloc] init]; 
    [successOperation setResponseObject:responseObject]; 
    [operationQueue addOperation:successOperation]; 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    // call delegate 
    [self didFailFetchDataWithError:error]; 
}];