首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过NSNotificationCenter传递ivar

通过NSNotificationCenter传递ivar
EN

Stack Overflow用户
提问于 2012-01-30 19:35:15
回答 3查看 280关注 0票数 1

我在学习关于NSNotificationCenter的知识。以下是我的代码

Observer.m

代码语言:javascript
复制
//note init method is not complete here

    -(id) init
    {
     [[NSNotificationCenter defaultCenter] 
             addObserver:self 
             selector:@selector(reciveTestNotification:) 
             name:@"TestNotification" object:nil];

    }

    -(void)reciveTestNotification:(NSNotification *)notification
    {
        if([[notification name] isEqualToString:@"TestNotification"])
        {
            NSLog(@"Succesfuly received the test notification");
        }
    }

Osender.m

代码语言:javascript
复制
-(void)reciveTestNotification:(NSNotification *)notification
{
    if([[notification name] isEqualToString:@"TestNotification"])
    {
        NSLog(@"Succesfuly received the test notification");
    }
}

我想我理解NSNotification是如何工作的,但是如何通过NSNotification传递ivar呢?

假设Osender.h有这样的代码

Osender.h

代码语言:javascript
复制
@interface Osender : NSObject
{
  IBOutlet UITextField *txt;
}

@property (nonatopic, copy) IBOutlet (UITextField *) *txt

当用户在txt上输入或更改内容时,如何通知reciveTestNotification并将数据传递给它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-30 19:51:16

NSNotification类有一个属性,用于存储您可能想要随通知一起发送的附加数据,即userInfo

你可以这样发布它:

代码语言:javascript
复制
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:txt forKey:@"textField"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:self userInfo:userInfo]

然后像这样得到它:

代码语言:javascript
复制
- (void)reciveTestNotification:(NSNotification *)notification
{
    UITextField *textField = [notification.userInfo objectForKey:@"textField"];
}

现在textField有了对您的UITextField的引用。

票数 2
EN

Stack Overflow用户

发布于 2012-01-30 19:41:25

您可以将自定义数据放入通知的userInfo中,它是一个NSDictionary实例。您需要确保通知的发布者在字典中创建的密钥与通知使用者期望的密钥相同。

票数 1
EN

Stack Overflow用户

发布于 2012-01-30 19:50:47

使用NSNotificationCenter的这种方法

代码语言:javascript
复制
- (void)postNotificationName:(NSString *)notificationName object:(id)notificationSender userInfo:(NSDictionary *)userInfo

并将userInfo设置为包含要传递的数据的NSDictionary:

代码语言:javascript
复制
NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"object", @"key", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:nil userInfo:infoDict];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9063217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档