NSNotificationCenter不工作?

时间:2012-02-26 16:13:16

标签: objective-c

正如我在这里所说,我正在使用NSNotificationCenter

A类(观察者)上我得到的init方法:

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

classB 我有:

//FILL NSDICTIONARY WITH DATA
    [dict setObject:@"SPOT1" forKey:[array objectAtIndex:0]];
    [dict setObject:@"SPOT2" forKey:[array objectAtIndex:1]];
    [dict setObject:@"SPOT3" forKey:[array objectAtIndex:2]];
    [dict setObject:@"SPOT4" forKey:[array objectAtIndex:3]];
    [dict setObject:@"SPOT5" forKey:[array objectAtIndex:4]];

    [[NSNotificationCenter defaultCenter] postNotificationName:@"HotSpotTouched" object:dict];

未调用A类getSensorsData中的函数。

这里有什么不对吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

您在发布通知时传递dict notificationSender,并在添加观察者时传递nil。这样就会过滤掉您的通知,因为发件人不匹配。

<强>更新
正如joerick在评论中指出的那样,在添加观察者时传递nil将禁用发送者过滤。所以这不是问题所在。

我刚刚创建了一个小型示例项目,并为我发送了通知。

@Rant:如果你想传递任意数据和你的通知,你应该使用userInfo字典(正如Cyrille在评论中指出的那样)。

答案 1 :(得分:3)

通知中心的呼叫看起来正确。我怀疑问题是由于对象A的生命周期。你说你在init方法中注册了通知。您是否正确分配了self?:

-(id)init
{
    //self does not have a meaningful value prior to the call to [super init]
    self = [super init];
    if (self != nil)
    {
        //ensure addObserver is called in the if code block
    }
    return self;
}

此外,最好将常量用于通知名称,因为它们可以减少拼写错误。请参阅Constants in Objective C

答案 2 :(得分:-1)

问题解决了:

如果你传递一个空参数,观察者就没有接到电话!

我的NSDictionary参数为null(因为我还不知道的原因),所以调用不会被触发。