如何在另一个视图控制器中调用NSNotificationCenter功能?

时间:2011-11-28 08:06:04

标签: iphone objective-c ios xcode notifications

  

可能重复:
  Can I watch an NSNotification from another class?

我目前在appDelegate.m文件中使用以下代码:

- (void)applicationDidEnterBackground:(UIApplication *)application
{

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(handleEnteredBackground:) 
                                             name: UIApplicationDidEnterBackgroundNotification
                                           object: nil];

}

但是,我希望它在我的viewController.m文件中调用一个选择器。我怎么能这样做?

谢谢!

5 个答案:

答案 0 :(得分:7)

通常,您首先在viewController.m init方法(或其他适当的方法)中注册通知:

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

在您的App Delegate中,触发通知:

- (void)applicationDidEnterBackground:(UIApplication *)application
{

    [[NSNotificationCenter defaultCenter] postNotification: @"NotificationNameHere"];

}

答案 1 :(得分:2)

在你的viewController.m

- (void)viewDidLoad
{

   [super viewDidLoad];

   [[NSNotificationCenter defaultCenter] addObserver: self
                                     selector: @selector(handleEnteredBackground:) 
                                         name: UIApplicationDidEnterBackgroundNotification
                                       object: nil];
}

答案 2 :(得分:1)

只需添加:

[[NSNotificationCenter defaultCenter] addObserver: self
                                     selector: @selector(handleEnteredBackground:) 
                                         name: UIApplicationDidEnterBackgroundNotification
                                       object: nil];
在viewController.m中的viewDidLoad方法。 (别忘了创建handleEnteredBackground:方法)

答案 3 :(得分:1)

您不想注册您的应用代表以输入背景通知,您已经获得回调。在回调中为这些通知注册您的应用代理更不经意。您可以这样做,因为其他海报已经建议将您的viewController对象添加为init上的观察者(并且不要忘记在dealloc上删除自己,否则您将获得错误的访问)。

答案 4 :(得分:0)

如果问题是从viewController访问委托,你可以这样做:

MYAppDelegate *delegate = (MYAppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate selectorName];

...否则澄清你的问题:P