2014-01-12 4 views
1

탐색 컨트롤러를 사용하는 iOS 앱에서 작업 중입니다. 여러 뷰 컨트롤러에서 클래스의 인스턴스 인 Request을 만듭니다.NSObject iOS에서 객관적인 c 블록 취소

- (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

내 질문에보다 잘 대답합니다. 나는 충돌을 막기 위해 취소 된 bool을 사용하고 있었는데, 이것은 취소 할 필요없이 충돌을 수정했다. 감사합니다. – user906357