【问题标题】:On button click "unrecognized selector sent to instance"在按钮上单击“发送到实例的无法识别的选择器”
【发布时间】:2014-10-14 13:22:25
【问题描述】:

Cocoa/Objective-C 新手在这里。

我有一个 MainMenu.xib 文件,其中有一个 NSView。 这就是 AppDelegate.h 中的 awakeFromNib 的样子:

- (void)awakeFromNib {
NSViewController *x = [[Login alloc] initWithNibName:@"Login" bundle:nil];
NSView *v = [x view];
[_theView addSubview:v];    

}

新视图有一个按钮,但是当我单击它时,我收到消息“无法识别的选择器已发送到实例”。

我完全迷路了。请帮我解决一下这个。谢谢!

它还在该行(在 main.m 中)抛出“线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = ...):

return NSApplicationMain(argc, argv);

错误是:

2014-10-14 09:05:09.743 FAST Tax Scanner[18408:303] -[OS_dispatch_queue_runloop login:]:无法识别的选择器发送到实例 0x6000000f7900 2014-10-14 09:05:09.743 FAST Tax Scanner [18408:303]-[OS_dispatch_queue_runloop login:]:无法识别的选择器发送到实例 0x6000000f7900 2014-10-14 09:05:09.744 FAST Tax Scanner[18408:303] ( 0 CoreFoundation 0x00007fff9484725c 异常预处理 + 172 1 libobjc.A.dylib 0x00007fff8c72fe75 objc_exception_throw + 43 2核心基础0x00007fff9484a12d-[NSObject(NSObject)不识别选择器:]+205 3 核心基础 0x00007fff947a5272 ___forwarding_ + 1010 4 核心基础 0x00007fff947a4df8 _CF_forwarding_prep_0 + 120 5 AppKit 0x00007fff8b87d260-[NSApplication sendAction:to:from:] + 327 6 AppKit 0x00007fff8b87d0de-[NSControl sendAction:to:] + 86 7 AppKit 0x00007fff8b8c9c4d-[NSCell_sendActionFrom:] + 128 8 AppKit 0x00007fff8b8e3655-[NSCell tr​​ackMouse:inRect:ofView:untilMouseUp:] + 2316 9 AppKit 0x00007fff8b8e2a27-[NSButtonCell tr​​ackMouse:inRect:ofView:untilMouseUp:] + 487 10 AppKit 0x00007fff8b8e213d-[NSControl mouseDown:] + 706 11 AppKit 0x00007fff8b863a58-[NSWindow 发送事件:] + 11296 12 AppKit 0x00007fff8b8025d4-[NSApplication sendEvent:] + 2021 13 AppKit 0x00007fff8b6529f9 -[NSApplication 运行] + 646 14 AppKit 0x00007fff8b63d783 NSApplicationMain + 940 15 快速税务扫描仪 0x0000000100001452 主要 + 34 16 libdyld.dylib 0x00007fff982c55fd 开始 + 1 17 ??? 0x0000000000000003 0x0 + 3 )

【问题讨论】:

  • 粘贴完整的错误消息,这样我们就可以看到它抱怨的是哪个选择器和哪个实例。此外,如果错误发生在单击按钮时,您可能希望显示响应该按钮操作而执行的代码。
  • 如果你在 xcode 中连接错误也可能发生这种情况
  • @PhillipMills 完成。感谢您的宝贵时间!
  • 它表示您正在对无法识别该方法的对象调用login: 方法。由于它不是您通常会使用的对象类型,我怀疑您正在尝试使用已发布的东西。在您使用login: 调用的地方,代码是什么样的? (或者您可能已将控件连接到 login: 方法,该方法在运行时不存在。)

标签: objective-c macos cocoa nsbutton nsviewcontroller


【解决方案1】:

哦,原来如此……

尝试将NSViewController *x 保存为创建它的对象的强属性,而不是将其作为局部变量。按照目前的创建方式,Login 对象在 awakeFromNib 方法结束后将无法生存。

【讨论】:

    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 2018-07-20
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多