无法弄清楚“无法识别的选择器发送到实例”源

时间:2014-07-16 20:44:55

标签: objective-c cocoa crash

所以我在我的智慧结束时,我来回切换一些共享信息,并最终导致我的应用程序崩溃。我认为这是因为我没有正确地释放观察者,但是在查看崩溃日志时它说明了一个无法识别的选择器被发送到实例。有没有人更了解崩溃日志,它可以告诉我更多关于发生了什么的事情?我可以得到日志中发生的事情的基本要点,但我仍然是一个新手,很多信息都在我脑海中。

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000

Application Specific Information:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType _adjustLengthDueToViewFrameChange:]: unrecognized selector sent to instance 0x608000095b80'
terminating with uncaught exception of type NSException
abort() called

Application Specific Backtrace 1:
0   CoreFoundation                      0x00007fff8fdcb25c __exceptionPreprocess + 172
1   libobjc.A.dylib                     0x00007fff92afae75 objc_exception_throw + 43
2   CoreFoundation                      0x00007fff8fdce12d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3   CoreFoundation                      0x00007fff8fd29272 ___forwarding___ + 1010
4   CoreFoundation                      0x00007fff8fd28df8 _CF_forwarding_prep_0 + 120
5   CoreFoundation                      0x00007fff8fd99e0c __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 12
6   CoreFoundation                      0x00007fff8fc8d82d _CFXNotificationPost + 2893
7   AppKit                              0x00007fff915a4003 -[NSView _postFrameChangeNotification] + 434
8   AppKit                              0x00007fff915ad6c2 -[NSView setFrameSize:] + 1586
9   AppKit                              0x00007fff915ad049 -[NSView setFrame:] + 294
10  AppKit                              0x00007fff915acc2b -[NSWindow setContentView:] + 453
11  AppKit                              0x00007fff91beeace -[NSStatusItem setView:] + 224
12  MyAppHelper                        0x00000001000775f5 -[NSStatusItem(BCStatusItem) setupView] + 85
13  MyAppHelper                        0x000000010000cdbb -[MyAppHelperCapHelperServer createStatusBarItem] + 299
14  MyAppHelper                        0x000000010000cf5b -[MyAppHelperCapHelperServer insertCaptureMenu] + 43
15  MyAppHelper                        0x000000010000fe3d -[MyAppHelperHelperServer observeValueForKeyPath:ofObject:change:context:] + 733
16  Foundation                          0x00007fff927e8f28 NSKeyValueNotifyObserver + 387
17  Foundation                          0x00007fff927e80f8 NSKeyValueDidChange + 453
18  Foundation                          0x00007fff927ecbe6 -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] + 118
19  MyAppHelperHelper                        0x0000000100109a3d __57-[RMSharedUserDefaults __applyBaselineAndNotify:updates:]_block_invoke + 349
20  CoreFoundation                      0x00007fff8fd086df __65-[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:]_block_invoke + 111
21  CoreFoundation                      0x00007fff8fd085ee -[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 222

首先,我不知道异常信息中的含义:[__NSCFType _adjustLengthDueToViewFrameChange:]。我似乎无法在任何地方找到任何信息。

提前致谢!

1 个答案:

答案 0 :(得分:2)

首先,我假设您手动管理内存,如果是这样,我强烈建议您迁移到ARC(自动引用计数),它将为您管理内存,您将不再拥有此类型或错误。谷歌有很多关于如何做到这一点的教程。 您可以在此处阅读更多内容:Transitioning to ARC Release Notes

其次,没有ARC,这种错误通常是因为你在已经发布的对象上调用方法/选择器而引起的,这就是无法识别方法/选择器的原因。

某人假设您负责清除项目中的所有警告,如果没有,请先检查是否有警告已指出您正在尝试调用某些不存在的方法/选择器你的应用中的对象。您可以使用本答案评论中提到的Analyze选项。要做到这一点只需要Cmd + Shift + b,从产品菜单中选择分析选项或按住用于构建应用程序的“播放”按钮,您也将看到分析选项。

最后,我发现您正在使用用户默认值。我建议您确保从自动释放附带的用户默认值中保留您收到的值。这将解释为什么编译器无法显示发生此错误的确切代码行,因为它会在objet自动释放之前发生。

如果不是用户默认值我将去检查所有自动释放的变量,很可能是问题出在其中一个。