2014-01-12 51 views
1

我正在使用導航控制器的iOS應用程序。在幾個視圖控制器中,我創建了一個類的實例,Request。在該I類有一個具有一個塊的方法:在NSObject中取消目標c塊iOS

- (void)submitRequest:(NSMutableDictionary *)dictionary 
{ 
    [[API sharedInstance] commandWithParams:dictionary 
           onCompletion:^(NSDictionary *json) { 
            if (!_canceled) { 
             [self.delegate receivedRequest:json]; 
            } 
           }]; 
} 

我的問題是,如果當UIViewControllers由於導航已經改變已接收到請求,則應用程序將崩潰。所以我想在導航控制器更改視圖控制器時將取消設置爲YES

導航更改時如何取消請求?

回答

3
- (void)submitRequest:(NSMutableDictionary *)dictionary 
{ 
    __weak MyClass *weakSelf = self; 
    [[API sharedInstance] commandWithParams:dictionary 
           onCompletion:^(NSDictionary *json) { 
            if (!_canceled) { 
             [weakSelf.delegate receivedRequest:json]; 
            } 
           }]; 
} 

您的區塊捕獲self,因此您可能會收到一個保留週期。使用弱參考來避免這一點。

+0

它回答我的問題比我問的要好。我正在使用取消布爾來防止崩潰,這修復了崩潰而無需取消。謝謝 – user906357