我应该把 removeObserver 从 NSNotification 放在哪里
Where should I put removeObserver from NSNotification
我有三个 viewControllers
,我正在尝试从 viewController
3 向 viewController
1 和 2 发送通知。我认为最好的方法是使用 NSNotification
。这是我目前所拥有的:
在classC-Post通知
[[NSNotificationCenter defaultCenter] postNotficationName:@"Updated "object:self];
中class乙
在classA和B - 先注册通知
// viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdate:) name:@"Updated" object:nil];
-(void)handleUpdate:(NSNotification *)notification {
NSLog(@"recieved");
}
到目前为止这有效。但是当我在 class A 和 B 中注销它时:
- (void)viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
handleUpdate
方法未被调用。所以明显的问题是当我 removeObserver's
为 notification
.
我的问题是,如果我到目前为止所做的一切都是正确的,为什么当我删除 removeObserver
时它不起作用?如果不正确,我可以去哪里removeObserver's
?
你所做的一切都是对的。这就是通知的工作方式。
如果你的class A,B总是需要处理更新,你就不会removeObserver。
因为你在 viewDidLoad 中添加了你的 "addObserver"。这意味着你只添加一次观察者。
正常的错误是你在"viewWillAppear"或"viewDidAppear"中添加"addObserver",它会在class中添加多次观察者。然后,你必须在 viewDidDisappear 中移除 Observer。
我有三个 viewControllers
,我正在尝试从 viewController
3 向 viewController
1 和 2 发送通知。我认为最好的方法是使用 NSNotification
。这是我目前所拥有的:
在classC-Post通知
[[NSNotificationCenter defaultCenter] postNotficationName:@"Updated "object:self];
中class乙
在classA和B - 先注册通知
// viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleUpdate:) name:@"Updated" object:nil];
-(void)handleUpdate:(NSNotification *)notification {
NSLog(@"recieved");
}
到目前为止这有效。但是当我在 class A 和 B 中注销它时:
- (void)viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
handleUpdate
方法未被调用。所以明显的问题是当我 removeObserver's
为 notification
.
我的问题是,如果我到目前为止所做的一切都是正确的,为什么当我删除 removeObserver
时它不起作用?如果不正确,我可以去哪里removeObserver's
?
你所做的一切都是对的。这就是通知的工作方式。 如果你的class A,B总是需要处理更新,你就不会removeObserver。 因为你在 viewDidLoad 中添加了你的 "addObserver"。这意味着你只添加一次观察者。 正常的错误是你在"viewWillAppear"或"viewDidAppear"中添加"addObserver",它会在class中添加多次观察者。然后,你必须在 viewDidDisappear 中移除 Observer。