29

我的一个名为 Message.m 的班级正在发布带有如下对象的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];

对于发布通知,userInfo可以是nil 或可以是object(如本例sentObject中的类型NSDictionary)。

问题:

objectinaddObserver方法的其他参数是什么?它们可以是 以外的任何东西nil,如果是,那又是什么?

4

3 回答 3

54

“ addObserver ”的那个“object”参数是一个可选的过滤器。发布通知后,您可以为通知的​​发送者设置一个对象,然后只会通知该发送者的事件。如果设置为“nil”,您将收到此类型的所有通知(无论是谁发送的)。

于 2012-07-25T06:35:53.670 回答
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 回答
4

对于任何对苹果文档感兴趣的人。这就是它所说的:

通知发送者

观察者想要接收其通知的对象;也就是说,只有这个发送者发送的通知才会传递给观察者。如果您传递 nil,通知中心不会使用通知的发送者来决定是否将其传递给观察者。

于 2013-12-12T10:14:34.323 回答