2012-01-17 2 views
15

다음 코드는 뷰를로드 할 때 옵저버를 추가합니다.addObserverForName을 사용할 때 Observer를 제거하십시오 : usingBlock

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserverForName:@"com.app.livedata.jsonupdated" 
                 object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) { 
                  NSLog(@"JSONUPDATED"); 
                 }]; 
} 

그리고 이렇게 잘됩니다. 그러나보기가 언로드되고 dealloc이 호출 된 것을 확인하면 알림은 계속 실행 중입니다.

이 관찰자를 비활성화하는 방법이없는 것 같습니까?

답변

25

해결 방법은보기에서 개체를 추적하는 것으로 보이며 dealloc 메서드에서이를 참조 할 수 있습니다. 다음

id observer = [[NSNotificationCenter defaultCenter] addObserverForName: /* ... */ ]; 

그리고 다음과 같은 제거 :

[[NSNotificationCenter defaultCenter] removeObserver:observer]; 
observer = nil; 
+1

이 하나 둘 개 다른 클래스에서 같은 관측을하고 관찰자가 제거되지 없구요 경우 작동하지 않습니다 / –

관련 문제