我有以下代码:
[[NSNotificationCenter defaultCenter] postNotificationName:kNewsfeedFetchCompleted object:self userInfo:userinfo];
只有这一点,没有别的地方。以下是我设置观察者的方法:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newsfeedFetchCompleted:) name:kNewsfeedFetchCompleted object:nil];
问题是当我做一个帖子时,newsfeedFetchCompleted被调用了两次..这怎么可能呢?
答案 0 :(得分:24)
当您的addObserver代码执行两次时,这是可能的。通知功能将在注册时多次调用。
因此,请确保添加观察者的代码仅执行一次。因此,您可以将其保存在viewDidLoad或init方法中。
如果你将它放在viewWillAppear中,那么在viewWillDisAppear中删除观察者。
答案 1 :(得分:8)
在添加观察者之前,请确保删除之前添加的观察者。
[[NSNotificationCenter defaultCenter]removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newsfeedFetchCompleted:) name:kNewsfeedFetchCompleted object:nil];
答案 2 :(得分:2)
如果您为newsfeedFetchCompleted
通知多次添加了相同的观察者,则可以。您应该使用removeObserver调用匹配addObserver调用。
例如,如果您在UIViewController的viewWillAppear / viewWillDidAppear / ViewDidLoad中添加了观察者,则应在viewWillDisappear / viewDidDisappear / ViewDidUnload中删除它。
对addObserver的相应删除调用是removeObserver:name:object: