【发布时间】:2012-06-02 03:12:46
【问题描述】:
我有一个简单的测试应用程序(在 OSX 中),它有一个视图控制器,其视图中有一个按钮。按钮的操作方法在视图控制器的类中,并且 IBAction 在 IB 中连接(通过文件的所有者)。单击按钮时,我收到 EXC_BAD_Access 错误(除了偶尔会收到 -[NSRunLoop buttonClick:] )。我在这里阅读了一堆关于 NSViewControllers 不在响应者链中的帖子,而且在 IB 中专门挂钩操作方法应该可以工作。我唯一的代码是这样的:
在应用委托中:
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
TestController *controller = [[TestController alloc] initWithNibName:@"TestController" bundle:nil];
[self.window.contentView addSubview:controller.view];
}
而且,在 TestController 类中,就是这样:
-(IBAction)buttonClick:(id)sender {
NSLog(@"%@",sender);
}
我有 2 个问题。为什么会发生这种情况,以及将 IBActions 用于按钮方法的正确 mvc 位置在哪里(控制器类不应该处理这些)?
【问题讨论】:
-
qegal 的答案虽然写得好像你在 iOS 上一样,但基本上可以为你解决问题。您将创建的视图控制器放入局部变量中,并立即释放(通过 ARC)。这意味着当按钮被按下时,它正在向一个无效对象发送消息。如果您在应用程序委托中创建一个
strong属性来保存控制器并分配给它,那么一切都会正常工作。视图控制器通常是放置IBAction方法的正确位置。
标签: objective-c macos model-view-controller nsviewcontroller