0

我有一个关于 NSNotificationCenter 的问题。我有 3 个视图控制器正在注册相同的推送通知,应用程序的流程如下:

情况1:

  1. View Controller 1 注册通知
  2. 视图控制器 2 被初始化并从视图控制器 1 显示为模态
  3. View Controller 2 注册通知
  4. 视图控制器 3 被初始化并从视图控制器 2 显示为模态
  5. View Controller 3 注册通知
  6. 通知被触发

我的所有视图控制器(VC1、VC2 和 VC3)都会响应这个通知吗?我只希望我最顶层的视图控制器响应此通知。如果视图层次结构中存在其他 VC,则会单独触发通知。

案例二:

  1. View Controller 1 注册通知
  2. 视图控制器 1 得到一个自我调用,并在前一个视图控制器上显示为模态。
  3. View Controller 1 再次注册通知
  4. 步骤 2 和 3 再重复一次。
  5. 通知被触发

在这里,我希望我的顶级 VC 响应此通知。如果视图层次结构中存在其他 VC,则会单独触发通知。6. 通知被触发

4

2 回答 2

1

如果它仍然存在(在视图控制器的情况下位于导航堆栈上),每个已注册通知的对象(视图控制器)都会收到它。

例如,一种解决方案是在视图控制器消失时停止侦听,但您需要小心以适当的一对方法开始侦听/停止侦听 - 所以不要在 init 中侦听并在 viewWillDisappear 中停止侦听,如果您期望它在用户导航回来时再次收听。

还为导航堆栈上的视图控制器做好准备,以便在内存变低时卸载/取消分配,因为它们可以由 iOS 按需重构。

最后——不要在同一个视图控制器中注册两次——如果你这样做,你会收到两次通知。

如果你这样想,我相信你很快就会找到适合你情况的解决方案。

于 2011-04-20T08:24:38.907 回答
0

我认为另一种方法可以是在发布通知时在 userInfo 字典中发送一些唯一数据,然后当所有注册此通知的视图控制器都可以首先检查该值然后进行相应处理时。

于 2011-04-21T06:15:55.343 回答