错误:单击按钮时“将无法识别的选择器发送到实例”
Posted
技术标签:
【中文标题】错误:单击按钮时“将无法识别的选择器发送到实例”【英文标题】:Error: "unrecognized selector sent to instance" when clicking button 【发布时间】:2015-09-17 09:41:23 【问题描述】:请让我告诉你我在做什么。
-
我的窗口有一个 NSView "MainContainer"
在窗口的 laod,我在窗口的 NSView 中添加了一个自定义视图“Options”
客户视图“Options”上有一个名为“Customer Details”的按钮
在客户详细信息上单击>> 当前视图(选项)被删除并加载新视图(客户详细信息视图)。下面给出了我的表现:
NSViewController* cdv = [[CustomerDetailsView alloc] init];
NSView* MainView = [[self view] superview];
[[self view] removeFromSuperview];
[MainView addSubview:[cdv view]];
现在的问题是最后一个视图(客户详细信息视图)有一些按钮,没有人在工作,我收到一个错误,即“unrecognized selector sent to instance”。请让我知道我该怎么办?
2015-09-17 15:45:37.872 TechHeal[5058:125394] 未启动 2015-09-17 15:46:05.452 TechHeal[5058:125394]-[NSSnapshotContextSignature encryptClick:]:无法识别的选择器发送到实例 0x6080000e5c80 2015-09-17 15:46:05.452 TechHeal[5058:125394]-[NSSnapshotContextSignature encryptClick:]:无法识别的选择器发送到实例 0x6080000e5c80 2015-09-17 15:46:05.464 TechHeal[5058:125394] ( 0 核心基础 0x00007fff9834a03c __exceptionPreprocess + 172 1 libobjc.A.dylib 0x00007fff8e54c76e objc_exception_throw + 43 2核心基础0x00007fff9834d0ad-[NSObject(NSObject)不识别选择器:]+205 3 核心基础 0x00007fff98292e24 ___forwarding___ + 1028 4 核心基础 0x00007fff98292998 _CF_forwarding_prep_0 + 120 5 libsystem_trace.dylib 0x00007fff95ef2cd7 _os_activity_initiate + 75 6 AppKit 0x00007fff9127eeb1-[NSApplication sendAction:to:from:] + 452 7 AppKit 0x00007fff91294946-[NSControl sendAction:to:] + 86 8 AppKit 0x00007fff91294862 __26-[NSCell_sendActionFrom:]_block_invoke + 131 9 libsystem_trace.dylib 0x00007fff95ef2cd7 _os_activity_initiate + 75 10 AppKit 0x00007fff912947bf-[NSCell_sendActionFrom:] + 144 11 libsystem_trace.dylib 0x00007fff95ef2cd7 _os_activity_initiate + 75 12 AppKit 0x00007fff91292cb3-[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 2821 13 AppKit 0x00007fff912eb34f -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 770 14 AppKit 0x00007fff91291366-[NSControl mouseDown:] + 714 15 AppKit 0x00007fff917fb2dc-[NSWindow _reallySendEvent:isDelayedEvent:] + 14125 16 AppKit 0x00007fff9118ac86 -[NSWindow 发送事件:] + 470 17 AppKit 0x00007fff91187212-[NSApplication sendEvent:] + 2504 18 AppKit 0x00007fff910b0b68-[NSApplication 运行] + 711 19 AppKit 0x00007fff9102d244 NSApplicationMain + 1832 20 技术治愈 0x00000001000048e2 主要 + 34 21 技术治愈 0x0000000100001224 开始 + 52 22 ??? 0x0000000000000003 0x0 + 3 ) (lldb)
PS:如果我直接加载客户详细信息,那么它可以正常工作,但是如果我从另一个视图加载它,那么它就无法正常工作。
【问题讨论】:
发布完整的异常文本。重要的是要知道消息是什么以及它被发送到什么对象。 令人惊讶的是错误已更改为解锁焦点...我添加了屏幕截图。 @***foe 这是一个不同的错误,因此无关紧要。 @***foe 我添加了错误日志和屏幕截图。请看一看。 OK 所以显示调用encryptClick:
的代码。
【参考方案1】:
您似乎正在创建一个CustomerDetailsView
控制器,获取它的视图,然后让控制器超出范围。假设encryptClick
在该控制器中实现,问题是当它被调用时,对象已经被释放。消息正在被传递到现在占用那块内存的任何地方。
尝试使 cdv
成为您发布的代码中任何 self
的强大属性,以便它可以随时处理事件。
【讨论】:
十亿..十亿感谢@Phillip Mills。你是超级麦克以上是关于错误:单击按钮时“将无法识别的选择器发送到实例”的主要内容,如果未能解决你的问题,请参考以下文章
错误:点击 UISegmentedControl 时将无法识别的选择器发送到实例