5

アプリケーション全体で共有されている単一のNSNotificationCenterによって投稿されたNSNotificationをログに記録したいと思います。3つのpostメソッドにロギングコードを追加する目的でNSNotificationCenterのサブクラス化を試みましたが、サブクラスの代わりにCFNotificationCenterのインスタンスが返されます。

確かにNSNotificationの投稿を監視する方法はありますか?

編集/更新

以下の2つの回答が正しく指摘しているように、すべての通知をリッスンしてハンドラーに記録できますが、ハンドラーがこれらの通知を受信するシーケンスは、ディスパッチされたシーケンスと同じであるとは限りません。ハンドラーが常に通知を受ける最初のハンドラーであると確信できれば、これは機能しますが、次のことはできません。'オブザーバーが通知を受信する順序は未定義です' NSNotificationDocsから

4

2 に答える 2

9

との両方を使用- addObserver:selector:name:object:して渡すことにより、通知について通知されます。nilnameobject

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(log:) name:nil object:nil];
    }
    return self;
}

- (void)log:(NSNotification *)notification
{
    NSLog(@"%@", notification);
}

編集:送信される通知の実際の順序を取得する場合はNSNotificationCenter、次のメソッドをサブクラス化してオーバーライドしてみてください。

– postNotification:
– postNotificationName:object:
– postNotificationName:object:userInfo:

サブクラス化を選択できない場合はNSNotificationCenter、スーパー実装を呼び出してこれらのメソッドをオーバーライドするカテゴリを定義することを検討してください。(カテゴリ内でスーパーを呼び出すには、メソッドをスウィズルする必要があります)。ヘルプが必要な場合は教えてください。

于 2012-04-17T15:51:25.280 に答える
0

[addObserver:selfセレクター:@selector(whatever :) name:nil object:nil]を使用して、ロギングコードをwhatever:メソッドに入れることができるはずです。このオブザーバーは、アプリによって投稿されたすべての通知(少なくともデフォルトのセンターによって投稿されたすべての通知)を取得する必要があります。

于 2012-04-17T15:45:02.467 に答える