2012-01-17 28 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

2つの異なるクラスで同じオブザーバーを持っており、観察者が削除されることは決してありません場合はこの1つは動作しません:/ –

関連する問題