NSNotification不会调用@selector方法

时间:2015-12-02 18:19:39

标签: ios objective-c iphone xcode nsnotificationcenter

我正在尝试将NSString从一个类传递到另一个类。让我们说我有ViewController A和ViewController B.我想将NSString从A传递给B.

在ViewController A中,我有以下代码:

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationMessageEvent" object:userType];

//这里用户类型是我使用委托获得的字符串,我需要将此userType传递给ViewController B

在ViewController B中,我有以下代码: 在viewDidLoad中,我有以下代码:

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

//此NSNotificationCenter方法称为

我已注册以下选择器方法。

-(void) notificationAction:(NSNotification *) notification
{
    if ([notification.object isKindOfClass:[NSString class]])
    {
        NSString *message = [notification object];
        // do stuff here with your message data
        NSLog(@"%@ is message",message);
    }
    else
    {
        NSLog(@"Error, object not recognised.");
    }
}

//永远不会调用上面的选择器方法。

我已阅读其他类似的stackoverflow答案,但我无法找到任何有关此问题的解决方案。

2 个答案:

答案 0 :(得分:8)

您的代码和语法显然是正确的。我猜这是物体生命周期的问题。我假设以下任何一种都是正确的:

  • ViewController B在发布通知时实际上并不作为对象存在

  • ViewController A在ViewController B有机会注册之前发布通知。

您可以验证其中任何一种方法的一种方法是添加两个断点,一个用于发布通知,另一个用于注册通知侦听器。应在发布通知之前命中监听器注册的断点。如果发生这种情况,那么在发布通知时确认ViewController B实际上是一个存在的对象(就像它没有从导航堆栈中弹出一样)。

答案 1 :(得分:-1)

这就是你要找的东西 NSNotification not being sent when postNotificationName: called 您必须在postNotificationName

之前添加addObserver
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationAction:) name:@"NotificationMessageEvent" object:nil];

[[NSNotificationCenter defaultCenter] postNotificationName:@"NotificationMessageEvent" object:nil];