未调用NSNotificationCenter选择器

时间:2010-07-07 21:30:06

标签: objective-c cocoa-touch ipad nsnotification nsnotificationcenter

在我的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];
}

我可以确认通知正在发布,因为“发布通知”被记录到控制台,但是从未调用“已接收通知”,这意味着未收到通知且未调用选择器。我无法弄清楚造成这种情况的原因。

由于

1 个答案:

答案 0 :(得分:14)

最可能的原因是您实际上并未调用addObserver:selector:name:object:。你那里没有伐木线;你确定代码正在运行吗?

第二个最可能的原因是您在发布通知之前呼叫removeObserver:。这种情况最常见于dealloc(如果您曾经观察过任何内容,总是调用removeObserver)。这里的错误是你的观察对象在通知之前已经解除分配。