在第一个视图控制器中添加“addObserver”(NSNotificationCenter),在第二个视图中处理

时间:2013-06-13 06:30:25

标签: ios objective-c nsnotificationcenter nsnotification observers

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

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

这就像在Android中广播一样。

2 个答案:

答案 0 :(得分:21)

是的,这是可能的。 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];

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

答案 1 :(得分:0)

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