[NSConcreteNotification objectForKey:]: unrecognized selector sent to instan

项目情况

在项目中,需要使用到消息通知中心,情况是这样的
1.要在一个方法里添加一个名为@”closeHUD”的消息监听

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeHUD:) name:@"closeHUD" object:nil];

2.在发送消息到NsnotifactionCenter 时候, 分为带userInfo 和 不带userInfo 两种情况
3.需要在 -(void)closeHUD:(NSNotification*)noti{}方法中,分辨判断

[[NSNotificationCenter defaultCenter] postNotificationName:@"closeHUD" object:nil userInfo:[NSDictionary dictionaryWithObject:@"2" forKey:@"1"]];

[[NSNotificationCenter defaultCenter] postNotificationName:@"closeHUD" object:nil];

问题出现

在解析Nsnotifaction*的过程中 出现了
[NSConcreteNotification objectForKey:]: unrecognized selector sent to instan错误

具体原因,是因为在解析noti的数据时候,没有使用正确的姿势

NSDictionary *dict = [[NSDictionary alloc] init];
    dict = (NSDictionary*)noti;
    NSLog(@"%@",dict);

以为这样就可以获得noti后的字典 其实不然

正确姿势如下

 NSDictionary *sDict = [[NSDictionary alloc] init];
    sDict = noti.userInfo;
    NSString *s = [sDict objectForKey:@"1"];




这里noti.userInfo 其实就已经帮我们解析好了 因为我们在post这个消息的时候, 不就是用的字典么~

完整消息注册与发送及解析如下:

添加消息监听

//添加一个名为@"closeHUD"的监听
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeHUD:) name:@"closeHUD" object:nil];

向消息中心发送消息

//带userInfo
 [[NSNotificationCenter defaultCenter] postNotificationName:@"closeHUD" object:nil userInfo:[NSDictionary dictionaryWithObject:@"2" forKey:@"1"]];

 //不带userInfo
  [[NSNotificationCenter defaultCenter] postNotificationName:@"closeHUD" object:nil];

方法

-(void)closeHUD:(NSNotification*)noti{
    [_hub hide:YES];

    NSDictionary *sDict = [[NSDictionary alloc] init];
    sDict = noti.userInfo;


    NSString *s = [sDict objectForKey:@"1"];

    if (noti && [s isEqualToString:@"2"]) {
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"closeHUD" object:nil];
        [Common showMsgBox:@"" msg:@"蓝牙搜索结束" parentCtrl:self];

    }
    else{
        [[NSNotificationCenter defaultCenter] removeObserver:self name:@"closeHUD" object:nil];
        [Common showMsgBox:@"" msg:@"蓝牙连接失败" parentCtrl:self];
    }

}

总结: 使用消息通知,一般出现奔溃的情况,可能不一定是消息通知本身的问题, 更多的可能是所以post后 , 错误调用了监听方法,导致方法内的函数出现的各种问题导致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值