15

andを使用NSNotificationCenterして1 つのインスタンスを取得しようとしていますが、なぜ機能しないのかわかりません。addObserverpostNotificationName

オブザーバーを追加し、2 つの異なるクラスでメッセージを送信するには、2 行のコードを記述します。

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

[[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:self];

名前を設定すると、nilそれは単なるブロードキャストであるため、正常に機能します。通知名を定義しようとすると、メッセージが通過しません。

4

7 に答える 7

12

私のコードはすべて次のNSNotificationsように使用します:

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

[[NSNotificationCenter defaultCenter] postNotificationName:@"ScanCompleted" object:nil];

1 つ目は通知の登録で、2 つ目は通知の投稿です。

于 2010-01-21T23:03:15.493 に答える
11

基本的には、すべて実行順序に関係しています。addObserver の前に postNotificationName を実行した場合、これは簡単に発生する問題です。ブレークポイントを使用して、コードをステップ実行してください:)

最初のブレークポイントはここで停止する必要があります。

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

それからここに:

[[NSNotificationCenter defaultCenter]postNotificationName:@"ScanCompleted" object:self];

また、セレクターにコロンがオンになっていることを確認してください。メソッドのシグネチャは次のようになるためです。

- (void)updateView:(NSNotification *)notification;
于 2013-07-10T23:34:08.997 に答える
6

これを変える:

[[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:self];

これに:

[[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:nil];

最初の通知が適切に登録されている場合は、newEventLoaded を呼び出す必要があります。

于 2010-01-21T22:47:23.003 に答える
4

私は同様の問題を抱えていましたが、私の問題は別のスレッドで通知が呼び出されたためでした。これで私の問題は解決しました。

dispatch_async(dispatch_get_main_queue(),^{
    [[NSNotificationCenter defaultCenter]postNotificationName:@"Event" object:self];
});
于 2016-08-25T13:36:37.057 に答える
2

@ "Event"とnil以外の名前を試しましたか?念のため、1つのファイルでイベント名を定義し、それを通知の登録と送信の両方に含めることができます。例えば:

ヘッダーファイル:

extern NSString * const NOTE_myEventName;

ソースファイル:

NSString * const NOTE_myEventName = @"MyEventName";

登録:

[[NSNotificationCenter defaultCenter]
 addObserver:self
    selector:@selector(handleMyEvent:)
        name:NOTE_myEventName
      object:nil];

通知の送信:

[[NSNotificationCenter defaultCenter]
    postNotificationName:NOTE_myEventName object:nil];
于 2010-01-22T00:59:23.607 に答える
1

NSNotification「呼び出されたときに送信されないpostNotificationName:」クラッシュを正常に修正しました。

本当のバグは通知メッセージ ハンドラにあることがわかりました。

postNotificationNameとは、このaddObserverスレッドの最初の投稿として問題ありません。

于 2011-01-03T00:22:14.877 に答える