4

ナビゲーションスタック内の以前のビューのContollerにポップするとクラッシュする理由がわかりません。 私はカスタムナビゲーションバーを使用しています(元は隠れていて、カスタムボタンはナビゲーションを起動します - プッシュとポップ - 代わりに)。ナビゲーションベースのアプリケーションでpopViewControllerAnimatedが実行されたときのEXC_BAD_ACCESS

Program received signal: “EXC_BAD_ACCESS”. 

#0 0x011a4a60 in objc_msgSend 
#1 0x0044e37c in -[UIImageView(UIImageViewInternal) _canDrawContent] 
#2 0x003bf3df in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
#3 0x003bf1b0 in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
#4 0x003bf1b0 in -[UIView(Internal) _didMoveFromWindow:toWindow:] 
#5 0x003bdfc4 in -[UIView(Hierarchy) _postMovedFromSuperview:] 
#6 0x003b6dfc in -[UIView(Internal) _addSubview:positioned:relativeTo:] 
#7 0x003b514f in -[UIView(Hierarchy) addSubview:] 
#8 0x005ca471 in -[UINavigationTransitionView transition:fromView:toView:] 
#9 0x005c9ed5 in -[UINavigationTransitionView transition:toView:] 
#10 0x0043c606 in -[UINavigationController _startDeferredTransitionIfNeeded] 
#11 0x0043c292 in -[UINavigationController _popViewControllerWithTransition:allowPoppingLast:] 
#12 0x0043bfa9 in -[UINavigationController popViewControllerWithTransition:] 
#13 0x0043f62b in -[UINavigationController popToViewController:transition:] 
#14 0x000124fa in -[BaseViewController bottomNavigationFiredController:] at BaseViewController.m:187 
+0

関連コードも投稿してください。 – Rog

+2

NSZombieEnabledを設定しましたか?静的アナライザーを使用しましたか? –

+0

はい、これはゾンビが有効になっているスタックです。それほど説明的ではありません。私は既に、コントローラが押し出される可能性が最も高いという見方が発表されていることを認識していました。したがって、コントローラ自体がナビゲーションのコントローラスタックに保持されている場合でも、すべてのサブビューを含むビューが解放されます。私の場合、ひどくリリースされたuiimageviewはクラッシュを引き起こしました。 – Lukasz

答えて

2

私は財産を作り、合成することによって、あなたの前のビューを保持しようとすることができ、あなたの最後のビューは、もはやretained.The最善の方法であるためであることができなかった、同じ問題に直面していた:私は取得

トレースそれ。その後

[self.navigationController popToRootViewControllerAnimated:YES]; 

それはyou.Becauseこれを助けている場合、私に教えてください

[self.navigationConroller popViewControllerAnimated:YES]; 

を使用しようとか、目的のビュー

[self.navigationController popToViewController:myview animated:YES]; 

にポップするかrootviewするポップすでにリリースされているビューに移動しようとすると、エラーが発生します。

+0

私は、UIImageがリリースされてクラッシュを引き起こしたことを知りました。私はコントローラーの見方が離れているという事実を知りませんでした。私は、uinavigationコントローラがスタック内にそれを保持していると思った。 – Lukasz

+0

あなたはそれを見つけました。私の答えがあなたを助けたら、私の答えを投票することを忘れないでください。よろしくお願いします。 – Sabby

+0

これは私が見つけたものに非常に近いです。私はそれに投票した。 – Lukasz

3

のViewControllerは、それが(それにナビゲーションコントローラのスタックを保持)自体がリリースされていない場合であっても、(新しいビューのcontrolerが押し込みある)ナビゲーションスタックに押しやられたとき、その不具ビューが解放されていることを覚えておく価値があります(そのすべてはもちろんサブビューです)。

このタイプのクラッシュは、主にメモリ管理のUI部分を指しています(ほとんどの場合、私のケースであった自動解放されたUIImagesの二重リリースです;-)。

UINavigationControllerがどのようにメモリを管理しているかを誰かに理解させるのに役立ちます。

関連する問題