为什么我这个思路会报错

为什么我这个思路会报错

我在自己的test类里定义了一个+(void)的方法(已经在.h里注册),下面是test.m文件里的代码

@implementation test1
+(void)makenocenter{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(testno1) name:@"test1" object:nil];
}
-(void)testno1{
    NSLog(@"test1里的广播");
}

-(void)dealloc{
    [[NSNotificationCenter defaultCenter]removeObserver:self name:@"test1" object:nil];
}

然后再main里调用那个+(void)的方法来注册广播。下面是main里的代码

@autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        [test1 makenocenter];
        [[NSNotificationCenter defaultCenter]postNotificationName:@"test1" object:nil];
    }

然后在发送广播的时候出现错误,这是什么原因?因为addOberver:self里的self参数的问题嘛?这个test从未被实例化,我应该怎么修改?

我希望通过一个+(void)的方法来手动注册广播中心而不是在实例化方法里面注册

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

但是你在main方法中用到了test1这个对象啦,你就需要引入test头文件,然后实例化一个test1这个对象。

  • Giroy3925940 提问者 #1
    非常感谢!
    2017-01-29 19:07:23
Tender10 2017-01-29 18:49:42

在main.m中你是不是忘记初始化test1对象啦。

  • 提问者 Giroy3925940 #1
    必须要初始化嘛?我通过+(void)的方法调用不可以嘛?
    2017-01-29 18:59:34
  • St711 回复 提问者 Giroy3925940 #2
    亲测可以用类方法直接调用,你把这里的-号都改成+号就成啦(dealloc,testno1) @implementation test1 +(void)makenocenter{ [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(testno1) name:@"test1" object:nil]; } -(void)testno1{ NSLog(@"test1里的广播"); } -(void)dealloc{ [[NSNotificationCenter defaultCenter]removeObserver:self name:@"test1" object:nil]; }
    2017-04-12 21:34:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
iOS入门:基础语法与常用控件
  • 参与学习       1337    人
  • 提交作业       712    份
  • 解答问题       1878    个

很多人都在疑问没有基础该怎么学习iOS开发?不用担心,本路径采用游戏关卡式的教学模式,并且以经典OC与最新Swift双重结合的教学内容,帮助大家快速掌握两种iOS开发语言基础,去掉“零”标签。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师