【问题标题】:Add 'addObserver' (NSNotificationCenter ) in a 1st view controller, handle in 2nd [duplicate]在第一个视图控制器中添加“addObserver”(NSNotificationCenter),在第二个中处理 [重复]
【发布时间】:2013-06-09 10:58:13
【问题描述】:

我看到了一些关于在同一个类中添加观察者和句柄的例子,但我想知道是否可以在第一个视图控制器中添加观察者并在第二个视图控制器中处理它?

我想不断地从第一个视图控制器发送距离并在第二个视图控制器中处理它。 作为子视图添加的第二个视图控制器:addSubviewaddChildViewController

这有点像android中的广播。

【问题讨论】:

  • 为什么不呢?这正是NSNotificationCenter的目的。

标签: ios objective-c nsnotificationcenter nsnotification observers


【解决方案1】:

是的,这是可能的。 NSNotificationCenter 就是这样工作的。

首先,您必须在第一个视图控制器中注册监听器,如下所示。

-(void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(somethingHappens:) name:@"notificationName" object:nil];
}

-(void)somethingHappens:(NSNotification*)notification
{

}

其次,从第二个视图控制器发布通知,如下所示。

[[NSNotificationCenter defaultCenter] postNotificationName:@"notificationName" object:obj];

系统会将通知广播给所有听众。

【讨论】:

  • 我有点困惑,当我想说'一切正常,处理事件'时,我使用'postNotificationName',对吗?但是“somethingHappens”应该在第二个视图控制器中。只是为了澄清哪些代码应该在正确的控制器中。
  • 如果你想从 viewcontroller A 向 viewController B 发送通知,那么你需要使用来自 A 视图控制器的 postnotification,并注册监听器并在 B 中处理它,每次发布通知时都会有 somethingHappens 方法将自动调用,因为您将侦听器注册到该方法。
  • 谢谢!解决了我的问题!
  • 我可以向我的 iOS 应用中的所有控制器发送通知吗?
【解决方案2】:

还有另一种方法可以做到这一点(如果您想让其他视图控制器知道对象的值是否已更改)。您可以使用 KVO(键值观察): http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/Articles/KVOBasics.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多