按钮单击在后续启动时给出不同的错误

时间:2012-06-02 23:10:27

标签: objective-c macos nsviewcontroller

我以前从未见过这个回复,同一个动作在同一个应用程序的不同运行中会引发不同的错误。

我在一个NSViewController子类中有一个按钮(只记录发件人)的IBAction,它会在单击按钮时抛出错误(这是一个OSX应用程序)。我得到了这些(到目前为止):

-[NSArrayM buttonClick:]: unrecognized selector sent to instance
-[__NSCFDictionary buttonClick:]: unrecognized selector sent to instance
-[__NSCFSet buttonClick:]: unrecognized selector sent to instance
-[NSRunLoop buttonClick:]: unrecognized selector sent to instance

而且,可怕的EXC_BAD_ACCESS。

此测试应用程序中唯一的代码是在app委托中实例化视图控制器:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    TestController *controller = [[TestController alloc] initWithNibName:@"TestController" bundle:nil];
    [self.window.contentView addSubview:controller.view];
}

这个IBAction在视图控制器子类中:

-(IBAction)buttonClick:(id)sender {
    NSLog(@"%@",sender);
}

在视图控制器中实现的IBAction在IB(通过文件所有者)连接到其视图中的按钮。

我无法理解如何在如此简单的程序中获得如此多的不同错误消息。这可能是视图控制器不在响应链中的问题吗?如果是这样,为什么它应该抛出错误,消息是否应该被发送到链中然后被丢弃?

我已经尝试让控制器的视图将控制器设置为下一个响应者(使用[controller.view setNextResponder:controller];),但这只是在启动时给出了EXC_BAD_ACCESS错误。

1 个答案:

答案 0 :(得分:0)

好的,我用来自Shane Stanley的指针修复了这个问题(我在ApplescriptObjC上做了另一个版本来询问那里的问题,但那个版本有效)。这是一个内存管理问题 - 使用ARC时很容易忘记。在我向其发送IBAction之前,TestController实例正在被释放。这解释了变量错误消息,因为向解除分配的对象发送消息可以指向任何内容。通过为TestController实例(控制器)声明属性(作为保留)来解决该问题。