3

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

1->2->3->1

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

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

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

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

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

我也在dealloc()函数中正确地删除了它们。

4

2 回答 2

3

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

于 2011-06-10T16:39:52.207 回答
1

这是因为viewDidLoadviewWillAppear:在您发送通知后被调用。假设您已在某处初始化控制器,则改为设置它initWithNibName:bundle:(如果您使用 xib 文件)或其他init方法(initWithCoder:例如)。如果你还没有初始化控制器,你也不能真正监听它里面的通知。

于 2011-06-10T15:55:23.647 回答