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

Posted

技术标签:

【中文标题】按钮单击在后续启动时会出现不同的错误【英文标题】:Button Click Gives Different Errors On Subsequent Launches 【发布时间】:2012-06-02 23:10:27 【问题描述】:

我以前从未见过这种响应,在同一应用的不同运行中,相同的操作会引发不同的错误。

我在 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。

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

- (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】:

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

【讨论】:

以上是关于按钮单击在后续启动时会出现不同的错误的主要内容,如果未能解决你的问题,请参考以下文章

单击时将文本添加到鼠标位置时会出现分段错误

如何在单击提交按钮时获取复选框值?

与匿名管道一起使用的Diff在放入Makefile时会出现奇怪的错误

无法单击单选按钮,出现“ElementClickInterceptedException”错误

为啥在计算整数数组的最小值时会出现“实际或形式参数列表长度不同”的错误?

为啥单击按钮时会出现 NSUnknownKeyException?