我将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()
功能中正确删除它们。
答案 0 :(得分:3)
使用导航控制器导航回1将删除2和3.因此,在dealloc中,添加一个说明特定控制器已停止侦听的日志。您将看到侦听器被取消分配,之后它将不会收听通知。更新了sample
以在返回时发送通知。
答案 1 :(得分:1)
这是因为发送通知后会调用viewDidLoad
和viewWillAppear:
。如果你没有(例如initWithNibName:bundle:
),那么在init
中设置它(如果你使用xib文件)或其他initWithCoder:
方法,假设你已经把控制器放在某处。如果您还没有进入控制器,则无法真正收听其中的通知。