web-dev-qa-db-ja.com

NSNotification addObserverのパラメータ「オブジェクト」とは何ですか?

Message.mという名前の私のクラスの1つが、以下のようにオブジェクトsentObjectを使用して通知を投稿しています。

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];

通知を投稿する場合、userInfonilにすることも、objectにすることもできます(この例のsentObjectのタイプとしてのNSDictionaryのように)。

質問:

objectメソッドのaddObserverの他のパラメータは何ですか?それらはnil以外のものである可能性がありますか?もしそうなら、何ですか?

27
tranvutuan

" addObserver "へのその "object"パラメーターはオプションのフィルターです。通知の送信者に設定すると、その送信者のイベントのみが通知されます。 「nil」に設定すると、このタイプのすべての通知が届きます(誰が送信したかに関係なく)。

51
Thilo

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

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

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

}

通知とともにデータを渡したい場合に便利です。通知の受信者もそのデータを使用できます。

4

Appleのドキュメントに興味のある人のために。これはそれが言うことです:

notificationSender

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

2
nomann