4

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

私のプロジェクトはios6で完全に実行されたため、ios7でのみクラッシュするように見えるという有用な情報かもしれません.

于 2013-09-02T11:18:21.133 に答える
0

たぶん、userInfo の値は nil です....

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