在我的iPad应用程序中,我在一个班级注册了通知:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(selectedList:) name:@"TTSelectedList" object:nil];
我的selectedList:
方法如下所示:
- (void)selectedList:(NSNotification*)notification
{
NSLog(@"received notification");
}
然后在另一个班级(UITableViewController
)中,我在选择一行时发布该通知:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"posting notification");
[[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil];
}
我可以确认通知正在发布,因为“发布通知”被记录到控制台,但是从未调用“已接收通知”,这意味着未收到通知且未调用选择器。我无法弄清楚造成这种情况的原因。
由于
答案 0 :(得分:14)
最可能的原因是您实际上并未调用addObserver:selector:name:object:
。你那里没有伐木线;你确定代码正在运行吗?
第二个最可能的原因是您在发布通知之前呼叫removeObserver:
。这种情况最常见于dealloc
(如果您曾经观察过任何内容,总是调用removeObserver
)。这里的错误是你的观察对象在通知之前已经解除分配。