Objective-C Cocoa通知NSApplicationDidResignActiveNotification

3

我有一个名为AppController.h/m的类,当NSNotificationDidResignActiveNotification被发送时,我想做一些事情。因此,我在AppController.m中编写了以下代码:

-(void) initialize(){
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationDidResignActive:)
                                                     name:NSApplicationDidResignActiveNotification
                                                   object:nil ];
}

然后

-(void) applicationDidResignActive (NSNotification*) note{
    NSBeep();
}

问题在于该方法未被执行,并且控制台显示如下内容:
+[AppController applicationDidResignActive:]: unrecognized selector sent to class 0x61c4

我不知道问题出在哪里:你能帮我一下吗?
谢谢!


神奇的Captain Pedanto说:“技术上讲,你没有一个名为AppController.h/m的类,而是有一个名为AppController的类,带有一个头文件AppController.h和一个实现文件AppController.m。哼。” - Rob Keniger
1个回答

3

initialize是一个类方法,而不是实例方法。我不确定,但似乎在使用选择器时,在类方法中也会假定该选择器将是一个类方法(有充分的理由)。AppController有一个名为applicationDidResignActive的实例方法,但没有一个同名的类方法。

不要在+initialize中注册通知,而应该在-init中重写并在那里注册。

- (void)init
{
    [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(applicationDidResignActive:)
                                                     name:NSApplicationDidResignActiveNotification
                                                   object:nil ];
}

非常感谢!它奏效了!所以问题是通知发送给了类和示例,不是吗? - tmnd91
1
没错。错误信息中的加号就是线索。 - Mark Adams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接