NSNotification没有覆盖所有观察员

时间:2011-06-10 15:34:11

标签: objective-c ios cocoa-touch uiviewcontroller nsnotifications

我将NSNotification用于特定的一组事件。我有三个视图,这样我在视图1上有一个“添加”按钮并单击它可以让我从视图1导航到视图2到视图3再次返回到视图1.

1→2→3→1

如果单击视图1上的ADD按钮,则使用NSNotification来推送视图控制器,并根据View 1发布的通知分别更新其他视图。

从视图1发送通知时,只有视图2接收通知。视图3没有。

这怎么可能?观察者的代码在视图2和视图3上完全相同。

这是在视图2和视图3中添加观察者的代码:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(didPressAdd:) 
                                             name:@"DidAddNotification" 
                                           object:nil];

我也会在dealloc()功能中正确删除它们。

2 个答案:

答案 0 :(得分:3)

使用导航控制器导航回1将删除2和3.因此,在dealloc中,添加一个说明特定控制器已停止侦听的日志。您将看到侦听器被取消分配,之后它将不会收听通知。更新了sample以在返回时发送通知。

答案 1 :(得分:1)

这是因为发送通知后会调用viewDidLoadviewWillAppear:。如果你没有(例如initWithNibName:bundle:),那么在init中设置它(如果你使用xib文件)或其他initWithCoder:方法,假设你已经把控制器放在某处。如果您还没有进入控制器,则无法真正收听其中的通知。