在 NSNotificationCenter 中添加自定义属性

Posted

技术标签:

【中文标题】在 NSNotificationCenter 中添加自定义属性【英文标题】:Add custom property in NSNotificationCenter 【发布时间】:2021-06-24 22:10:11 【问题描述】:

总的来说,我是 Objective C 的新手。

我正在创建一个监听通知的类

在那个通知中,我打算将它作为具有两个键值对的 NSdictionary

// eventType -> determine which value to change
// value -> value which needs to be changed -> can be string, dynamic object and Bool


TS equivalent would 

interface event 
 eventType: string 
 value: any

嗯,我目前有

- (void)initMessageEmit 
    NSLog(@"???? Initialize observers ????");
    [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(receiveNotification:)
            name:@"selfParticipantNotification"
            object:nil];

receive notification

- (void) receiveNotification:(NSNotification *) notification

我希望我的 recieveNotification 是这样的

- (void) receiveNotification:(NSNotification *) notification

    if ([[notification name] isEqualToString:@"selfParticipantNotification"]) 
        NSDictionary *event = notification.event;
        if (![event value]) 
            if ([[event eventType] isEqualToString:@"enabled"]) 
                [self enabled:event.value]
            
        
    

在上面,如果eventType值为enabled,我调用一个方法enabled并更新一个属性值。

value 这里可以是任何东西 -> NSString/NSDictionary/Bool 并且是/应该由 postNotificationName 传递

问题:如何使用 NSNotificationCenter 发送数据?

【问题讨论】:

【参考方案1】:

您可以使用object 参数发布任何带有通知的内容,如下所示。

 [[NSNotificationCenter defaultCenter] 
postNotificationName:@"selfParticipantNotification"
              object:@@"key":@"value"];

在接收通知时,您可以读取此值,如下所示。

 (void) receiveNotification:(NSNotification *) notification

    if ([[notification name] isEqualToString:@"selfParticipantNotification"]) 
        NSDictionary *dictionary = (NSDictionary*)notification.object;
        // Do something with dictionary
    

【讨论】:

非常感谢您的回答,我已经更新了问题,您可以再过一遍吗? 我在示例中使用了NSDictionary 作为对象。您可以在它的位置使用任何对象(您想要的自定义类事件)。在发布通知时传递您的对象并通过 (Event*)notification.object 读取相同的内容,如果您的对象的类称为 Event 例如。 @anny123 前面postNotificationName的代码回答有误,我现在已经修复了,请查看。 谢谢,我会尝试一下,让你知道这是否有效。再次感谢您的回答 BOOL 不是对象,您可以通过帖子中的[NSNumber numberWithBool:YES] 传递它,并在接收端将其读取为[(NSNumber*)notification.object boolValue]

以上是关于在 NSNotificationCenter 中添加自定义属性的主要内容,如果未能解决你的问题,请参考以下文章

消息通信机制NSNotificationCenter -备

NSNotificationCenter传值

在 NSNotificationCenter 中添加自定义属性

NSNotificationCenter addObserver 在 Swift 中调用私有方法

关闭时未收到 NSNotificationCenter 通知

NSNotificationCenter 通知在滑动时触发了两次