4

Is there some method to know crash reason in Xcode 4.6?

The crash stack is :
Exception Type:  SIGSEGV
Exception Codes: SEGV_ACCERR at 0xd9f2c061
Crashed Thread:  0

Thread 0 Crashed:
0   libobjc.A.dylib                     0x3a74f5aa objc_msgSend + 10
1   Foundation                          0x33157599 -[NSNotificationCenter postNotificationName:object:userInfo:] + 73
2   UIKit                               0x347830cd -[UIApplication _handleApplicationSuspend:eventInfo:] + 733
3   UIKit                               0x346f91e7 -[UIApplication handleEvent:withNewEvent:] + 2459
4   UIKit                               0x346f86cd -[UIApplication sendEvent:] + 73
5   UIKit                               0x346f811b _UIApplicationHandleEvent + 6155
6   GraphicsServices                    0x363ee5a3 _PurpleEventCallback + 591
4

4 回答 4

6

当您将观察者添加到通知中心时,您必须在对象被释放/销毁时将其删除。否则通知中心会将通知发送到被破坏的对象,从而导致崩溃。

1 - 检查您是否正确处理从通知中心删除。(通常您在 dealloc 方法上执行此操作)

2 - 如果第 1 步没有帮助,请使用仪器和僵尸分析您的应用程序。它会指出哪个对象被销毁但仍在接收消息。

于 2013-08-30T03:18:22.383 回答
1

几乎可以肯定一个对象在通知中心注册以接收该通知,然后在解除分配之前未能取消注册。

解决问题的最简单方法是启用 NSZombies — 参见本教程。如果您在启用僵尸的情况下运行,则应该被释放的对象仍保留在内存中,但如果有人试图调用它们,则会引发异常。因此,您可以准确地找出通知中心试图调用的对象类型,从而确定哪个对象可能犯了错误。

鉴于通知来源的名称_handleApplicationSuspend:eventInfo:——您可能还想快速检查注册的任何人UIApplicationWillResignActiveNotificationUIApplicationDidEnterBackgroundNotification以及与应用程序暂停相关的其他人。

于 2013-08-30T02:23:11.250 回答
0

可能是一个有用的信息,它似乎只在 ios7 上崩溃,因为我的项目在 ios6 上完美运行。

于 2013-09-02T11:18:21.133 回答
0

也许 userInfo 的价值为零....

[[NSNotificationCenter defaultCenter] postNotificationName:SayLoggedInNotification object:wSelf userInfo:@{@"from": wSelf.from}];
# wSelf.form is nil
于 2016-04-21T06:20:07.917 回答