NSNotificationCenter导致崩溃,试图调用appWillTerminate

时间:2015-10-12 22:52:53

标签: ios

好吧,这是一个奇怪的,它完全填满我的崩溃日志,我只是无法弄明白。查看跟踪,调用外观,然后调用[UIApplication _terminateWithStatus:],然后NSNotificationCenter尝试发布通知。 appWillTerminate在一个没有响应它的对象上调用。这个对象似乎有所不同,所以它看起来像一个僵尸。

这是我的两大问题。首先,我似乎无法重现这一点!我的崩溃记者甚至保存了用户的用户ID,所以我知道我和我的同事发生了这件事,但我从未见过该应用程序实际崩溃,他们说他们没有观察到它,即使崩溃日志在那里。其次,它发生了很多次。成千上万的这些都在一周之内发生。我真的没有任何具体的抱怨,但它让我感到紧张。应用程序在关闭时会崩溃吗?我怎样才能找出造成这种情况的原因?我无法找到任何听众:#NS; NSApplicationWillTerminateNotification"在我的代码中,除了MixPanel,Facebook和CocoaLumberjack。我已经完成并仔细检查了所有观察员都被移除了。我很难过。

Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0x157edd10
Crashed Thread:  0

Application Specific Information:
objc_msgSend() selector name: appWillTerminate:

Thread 0 Crashed:
0   libobjc.A.dylib                      0x0000000199379bd0 objc_msgSend + 16
1   CoreFoundation                       0x000000018471a6ac __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 16
2   CoreFoundation                       0x0000000184719ecc _CFXRegistrationPost + 392
3   CoreFoundation                       0x0000000184719c4c ___CFXNotificationPost_block_invoke + 56
4   CoreFoundation                       0x000000018477f434 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1528
5   CoreFoundation                       0x000000018465a834 _CFXNotificationPost + 364
6   Foundation                           0x00000001855c62fc -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
7   UIKit                                0x0000000189d59590 -[UIApplication _terminateWithStatus:] + 332
8   UIKit                                0x0000000189f716d0 __102-[UIApplication _handleApplicationDeactivationWithScene:shouldForceExit:transitionContext:completion:]_block_invoke1976 + 312
9   UIKit                                0x0000000189f74844 _runAfterCACommitDeferredBlocks + 288
10  UIKit                                0x0000000189f80de4 _cleanUpAfterCAFlushAndRunDeferredBlocks + 88
11  UIKit                                0x0000000189cbd1e4 _afterCACommitHandler + 92
12  CoreFoundation                       0x000000018472bc30 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 28
13  CoreFoundation                       0x00000001847299d4 __CFRunLoopDoObservers + 368
14  CoreFoundation                       0x0000000184729e04 __CFRunLoopRun + 924
15  CoreFoundation                       0x0000000184658dc0 CFRunLoopRunSpecific + 380
16  GraphicsServices                     0x000000018f7ac088 GSEventRunModal + 176
17  UIKit                                0x0000000189d32f60 UIApplicationMain + 200
18  Redacted                              0x00000001000d700c main (main.m:11)
19  libdyld.dylib                        0x0000000199b928b8 start + 0

1 个答案:

答案 0 :(得分:0)

如果一个类订阅了一个通知,而不是在解除分配之前取消订阅,就会发生这种情况。

使用Zombies工具调试此方案。它会告诉你违规课程是什么。