3

仮定のシナリオ:

私のviewDidLoad方法では、ビューコントローラーをカスタム通知のオブザーバーとして追加しています(たとえば、 notifications MyFooNotification)。プロセスの後半でビューが読み込まれると、通知が投稿され、コントローラーがそれを処理します。ビューでコントローラーを離れるとき、オブザーバーを (意図的に) に削除しませんviewDidUnload。次回ビューを開くと、オブザーバーが再び追加されますが、監視された通知が投稿されると、EXC_BAD_ACCESS.

なぜこれが起こっているのか誰でも説明できますか?

PS私はそれを削除する必要があることを知っていviewDidUnloadます。下位レベルの詳細に興味があるだけです。

4

1 に答える 1

5

おそらく、元のView Controllerがナビゲーションスタック(または同様のもの)からポップされたために割り当てが解除されたが、NSNotificationCenterそれへの参照が残っているためです。したがって、通知が再度投稿されると、NSNotificationCenter割り当てが解除されたView Controllerに通知を試みEXC_BAD_ACCESS、結果として取得します。

オブジェクトをオブザーバーとして追加する場合は、の間にオブジェクトを削除する必要がありますNSNotificationCenterdealloc

于 2011-03-25T09:38:44.613 に答える