29

sentObjectMessage.m という名前の私のクラスの 1 つは、以下のようなオブジェクトで通知を投稿しています。

NSDictionary *sentObject = [NSDictionary dictionaryWithObjectsAndKeys:draftData.arr,@"data", nil];

//Post notification to inform a receiver to reload data     
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadDuringSave" object:self userInfo:sentObject];

DraftData.m は、次のように通知を受け取る受信者になります。

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

通知を投稿する場合は、 (この例のタイプのように) にすることも、userInfoすることもnil できます。objectsentObjectNSDictionary

質問:

メソッドの他のパラメーターは何objectですか? addObserverそれらは 以外のものにすることができますnilか?

4

3 に答える 3

54

「 addObserver 」の「object」パラメーターはオプションのフィルターです。通知を投稿する際に、オブジェクトを通知の送信者に設定すると、その送信者のイベントのみが通知されます。「nil」に設定すると、このタイプのすべての通知を受け取ります (送信者に関係なく)。

于 2012-07-25T06:35:53.670 に答える
4

アップルのドキュメントに興味がある人向け。これはそれが言うことです:

通知送信者

オブザーバーが受け取りたい通知のオブジェクト。つまり、この送信者によって送信された通知のみがオブザーバーに配信されます。nil を渡すと、通知センターは通知の送信者を使用して通知をオブザーバーに配信するかどうかを決定しません。

于 2013-12-12T10:14:34.323 に答える
4

これを使用して、通知で任意のオブジェクトを渡すことができます。通知の受信者は、そのオブジェクトにアクセスできるようになります。たとえば、次のように実装できますdataReloaded

- (void)dataReloaded:(NSNotification *)notification {

    NSLog(@"%@", notification.object); // this will log the object you passed in addObserver:selector:name:object:

}

通知の受信者もそのデータを使用できるように、通知でデータを渡したい場合に役立ちます。

于 2012-07-25T06:35:28.327 に答える