【问题标题】:What is parameter `object` in NSNotification addObserver:?NSNotification addObserver: 中的参数“object”是什么?
【发布时间】:2019-09-20 04:31:08
【问题描述】:

我的一个名为 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 可以是 nilobject(如在本例中 sentObjectNSDictionary 的类型)。

问题:

addObserver 方法中object 的其他参数是什么?他们可以 除了nil 之外的任何其他内容,如果是,那又是什么?

【问题讨论】:

    标签: iphone nsnotificationcenter


    【解决方案1】:

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

    【讨论】:

    • 赞成,因为这个答案比我的更准确。虽然我的方法可以在不需要过滤的情况下工作,但 userInfo 参数确实用于传递数据。
    • 我怎样才能将object设置为发件人(在这个例子中是Message.m,请看我更新的OP)。
    • 嗯,你需要一个指向它的引用(变量)。但请注意,除非您有多个对象发送“reloadDuringSave”通知,否则这不会产生任何影响。
    • 在发布通知时,您必须使用作为“对象”传递的相同对象。不仅仅是同一类的另一个对象。
    • 是的,我知道我必须传递发布通知的完全相同的对象,老实说,我不知道该怎么做:(
    【解决方案2】:

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

    - (void)dataReloaded:(NSNotification *)notification {
    
        NSLog(@"%@", notification.object); // this will log the object you passed in addObserver:selector:name:object:
    
    }
    

    当您想通过通知传递数据时,它会很有用,以便通知的接收者也可以使用该数据。

    【讨论】:

    • 是的,我正在通过通知传递数据。在addOberver 中,我将 nil 传递给对象。如果我不通过 nil,我应该通过什么
    • 如果您不需要dataReloaded 中的数据,可以传递nil。如果您确实需要数据,则传递包含该数据的任何对象。
    • 实际上,我确实需要dataReload 中的数据,但我不知道我必须将什么传递给object
    【解决方案3】:

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

    通知发送者

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      相关资源
      最近更新 更多