Objective c 单击按钮时MAC应用程序崩溃事件

Objective c 单击按钮时MAC应用程序崩溃事件,objective-c,macos,cocoa,Objective C,Macos,Cocoa,朋友们好,我在创建MAC应用程序时遇到了问题,我有两个视图控制器。当我点击位于第一视图控制器应用程序中的按钮时,使用下面的代码替换视图 - (IBAction)gotoEmployeeView:(id)sender { delegate = (AppDelegate *)[[NSApplication sharedApplication]delegate]; secondViewController *employeeVC = [[secondViewController all

朋友们好,我在创建MAC应用程序时遇到了问题,我有两个视图控制器。当我点击位于第一视图控制器应用程序中的按钮时,使用下面的代码替换视图

- (IBAction)gotoEmployeeView:(id)sender
{
    delegate = (AppDelegate *)[[NSApplication sharedApplication]delegate];
    secondViewController *employeeVC = [[secondViewController alloc]initWithNibName:@"secondViewController" bundle:nil];
    [[delegate.window.contentView animator] replaceSubview:self.view with:secondVC.view];
    secondVC.view.frame = ((NSView *)delegate.window.contentView).bounds;
}
现在我有一个按钮,我已经在第二个视图上为这个按钮设置了点击事件。在id按钮下方单击事件

- (IBAction)btnClicked:(id)sender
{
    NSLog(@"clicked");
}
当我点击它时,应用程序崩溃了。并得到下面的错误

2013-08-12 14:33:46.989 Employee Register[1954:303] -[__NSCFString btnClicked:]: unrecognized selector sent to instance 0x10213ace0
2013-08-12 14:33:46.991 Employee Register[1954:303] -[__NSCFString btnClicked:]: unrecognized selector sent to instance 0x10213ace0
2013-08-12 14:33:46.994 Employee Register[1954:303] (
0   CoreFoundation                      0x00007fff8d76cf56 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff80e47d5e objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8d7f91be -[NSObject doesNotRecognizeSelector:] + 190
3   CoreFoundation                      0x00007fff8d759e23 ___forwarding___ + 371
4   CoreFoundation                      0x00007fff8d759c38 _CF_forwarding_prep_0 + 232
5   CoreFoundation                      0x00007fff8d75c70d -[NSObject performSelector:withObject:] + 61
6   AppKit                              0x00007fff8c5208ca -[NSApplication sendAction:to:from:] + 139
7   AppKit                              0x00007fff8c5207fe -[NSControl sendAction:to:] + 88
8   AppKit                              0x00007fff8c520729 -[NSCell _sendActionFrom:] + 137
9   AppKit                              0x00007fff8c51fbec -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2014
10  AppKit                              0x00007fff8c59fb74 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 489
11  AppKit                              0x00007fff8c51e7f6 -[NSControl mouseDown:] + 786
12  AppKit                              0x00007fff8c4e9c98 -[NSWindow sendEvent:] + 6306
13  AppKit                              0x00007fff8c4833a5 -[NSApplication sendEvent:] + 5593
14  AppKit                              0x00007fff8c419a0e -[NSApplication run] + 555
15  AppKit                              0x00007fff8c695eac NSApplicationMain + 867
16  Employee Register                   0x0000000100001342 main + 34
17  Employee Register                   0x0000000100001314 start + 52
 )

看起来您正在向NSString对象发送btnClicked消息。你能把代码贴在你调用[…bntClicked]的地方吗

您所描述的行为可能意味着实现btnClicked方法的viewController在调用操作之前被释放,或者interface builder中的操作设置不正确

您应该在实现btnClicked的viewController的dealloc方法中添加一条log语句,并确保在调用操作之前不会解除分配该语句。如果使用ARC,请确保有一个成员数据指向视图控制器,这样它们就不会被释放


另外,您应该在interface builder中删除iAction关联,然后再次执行此操作,确保将按钮连接到正确的视图控制器。

您的gotoEmployeeView代码在我看来很好。
注意
replaceSubview:with:
方法导致释放oldView


查看。

您好,谢谢您的回答,但我的应用程序仍会在按钮单击事件时崩溃检查我的示例项目。可能是您的问题在xib文件中。当我运行您的示例项目时,我遇到错误**方案“ViewController”不包含可为运行目标my Mac 64位支持的SDK生成的可构建内容。确保您的目标都指定此版本的Xcode支持的SDK**