8

iPad アプリの 1 つのクラスで、通知を登録します。

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
    [nc addObserver:self selector:@selector(selectedList:) name:@"TTSelectedList" object:nil];

私のselectedList:方法は次のようになります。

- (void)selectedList:(NSNotification*)notification
{
    NSLog(@"received notification");
}

次に、別のクラス (a UITableViewController) で、行が選択されたときにその通知を投稿します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"posting notification");
    [[NSNotificationCenter defaultCenter] postNotificationName:@"TTSelectedList" object:nil];
}

「投稿通知」はコンソールに記録されますが、「受信通知」は呼び出されないため、通知が投稿されていることを確認できます。つまり、通知が受信されておらず、セレクターが呼び出されていないことを意味します。何が原因なのかわかりません。

ありがとう

4

1 に答える 1

16

最も可能性の高い原因は、実際に呼び出していないことですaddObserver:selector:name:object:。そこにはログ行がありません。コードが実行されていると確信していますか?

2 番目に考えられる原因はremoveObserver:、通知が投稿される前に電話をかけていることです。これは最も一般的ですdealloc(何かを観察したことがある場合は常に呼び出す必要があります)。removeObserverここでのエラーは、通知前に監視オブジェクトが割り当て解除されたことです。

于 2010-07-07T21:37:16.377 に答える