10

我有以下代码:

 [[NSNotificationCenter defaultCenter] postNotificationName:kNewsfeedFetchCompleted object:self userInfo:userinfo];

只有这个,没有其他地方。这是我设置观察者的方式:

  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newsfeedFetchCompleted:) name:kNewsfeedFetchCompleted object:nil];

问题是当我发表一篇文章时,newsfeedFetchCompleted 被调用了两次。这怎么可能?

4

3 回答 3

24

当您的 addObserver 代码执行两次时,这是可能的。通知函数将在注册时被调用多次。

因此,请确保您添加观察者的代码只执行一次。因此,您可以将其保存在 viewDidLoad 或 init 方法中。

如果您将其放在 viewWillAppear 中,则在 viewWillDisAppear 中删除观察者。

于 2012-06-29T05:18:43.877 回答
7

在添加观察者之前,请确保删除之前添加的观察者。

[[NSNotificationCenter defaultCenter]removeObserver:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newsfeedFetchCompleted:) name:kNewsfeedFetchCompleted object:nil];
于 2012-06-29T05:18:25.100 回答
2

newsfeedFetchCompleted如果您为通知多次添加了相同的观察者,则有可能。您应该将 addObserver 调用与 removeObserver 调用相匹配。

例如,如果您在 UIViewController 的 viewWillAppear/viewWillDidAppear/ViewDidLoad 中添加了观察者,则应该在 viewWillDisappear/viewDidDisappear/ViewDidUnload 中将其删除。

addObserver 的相应删除调用是removeObserver:name:object:

更多信息可以在NSNotificationCenter 文档中找到

于 2012-06-29T05:17:48.827 回答