2011-09-19 7 views
10

私はマップキットで遊んでいて、注釈を作成しました。私は、このエラーが原因に私のバグを発見しようとしています:NSKVODeallocateBreakでブレークポイントを設定する

An instance 0x1b7ac0 of class AddressAnnotation was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:

私はよく分からないというNSKVODeallocateBreakがあるにブレークポイントを設定する場所。私はそれをデバッグするためにInstrumentsを使うことができると思っていましたが、試してみると、クラッシュした場所に私に何の指示も与えずにクラッシュします。何かご意見は?

答えて

16

あなたはおそらくあなたのコード内でこのような何かをやっている:あなたは、アノテーションが選択されているときに見つけるためにオブザーバーを登録していることを意味

[addressAnnotation addObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath options:NSKeyValueObservingOptionNew context:@"selectedOrDeselected"];

注釈が、このように、マップから削除されるときには、オブザーバーを削除する必要があります。エラーを削除する必要があります

[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];

。そうではなく、デバッグしたい場合は、必ずNSKVODeallocateBreakにブレークポイントを設定する必要があります。これを行うには、RunメニューManage BreakpointsAdd symbolic breakpointを開き、NSKVODeallocateBreakと入力します。

希望すると助かります!

breakpoint set --name NSKVODeallocateBreak 

今、あなたはそこに設定されたブレークポイントを持っている:、LLDBとここにブレークポイントを設定してアプリを起動し、それを一時停止、およびLLDBデバッグプロンプト書き込みATに

+0

私は実際にはivarであるアノテーションを追加しています。私は数回後にそれを移動しようとすると、私はそのエラーを取得します。ピン(mapViewに注釈)を追加することで、私は暗示的にオブザーバーを追加していますか?ありがとう。 – Crystal

+6

Xcode 4でシンボリックブレークポイントを設定するには、ブレークポイントナビゲータに切り替えて、下部にある小さなプラスボタンをクリックします。 (https://devforums.apple.com/thread/68421経由で) – Palimondo

5

。うまくいけば、これはおそらく@frowingによって記述される種類の問題を見つけるのに役立ちます。

+0

は、これをLLDBのデバッグプロンプトに毎回入力する必要なく、どこか別の場所に設定する方法がありますか? – Hlung

関連する問題