什么是对象的参数,nsnotification addObserver

时间:2012-07-25 06:26:42

标签: iphone nsnotificationcenter

我的一个名为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

===> 问题object方法中addObserver的其他参数是什么?它可以不是零,它们是什么......

3 个答案:

答案 0 :(得分:50)

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

答案 1 :(得分:4)

您可以使用它来传递包含通知的任何对象。然后,通知的接收者将能够访问该对象。例如,您可以像这样实现dataReloaded

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

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

}

当您希望通过通知传递数据时,它非常有用,因此通知的接收者也可以使用该数据。

答案 2 :(得分:2)

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

  

notificationSender

     

观察者想要接收通知的对象;那是,   只有此发件人发送的通知才会传递给观察者。   如果您传递nil,则通知中心不会使用通知   发送者决定是否将其传递给观察者。