2012-01-17 125 views
15

我有以下代码,在加载视图时添加了一个观察者。使用addObserverForName时删除观察者: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个不同类别和观察者永远不会被删除不工作:/ – 2015-10-16 23:33:35