正如我在这里所说,我正在使用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
中的函数。
这里有什么不对吗?
谢谢!
答案 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(因为我还不知道的原因),所以调用不会被触发。