exc_bad_access navigationベースのアプリケーションでpopviewControllerAnimatedの場合
-
09-10-2019 - |
質問
ナビゲーションスタックの以前のビューコントローラーに戻ったときにクラッシュする理由がわかりません。問題は、カスタムナビゲーションバーを使用していることです(オリジナルは潜んでいて、カスタムボタンがナビゲーションを発射します - プッシュアンドポップ - 代わりに)。
私が得るトレース:
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
解決
私はあなたの最後の見解がもはや保持されていないためにある可能性があるのと同じ問題に直面していました。最善の方法は、プロパティを作成して合成することで以前のビューを保持しようとすることです。
次に、使用してみてください
[self.navigationConroller popViewControllerAnimated:YES];
または目的のビューにポップします
[self.navigationController popToViewController:myview animated:YES];
または、ルートビューにポップします
[self.navigationController popToRootViewControllerAnimated:YES];
あなたがすでにリリースされているビューに進ろうとしているときにこのエラーが発生しているため、それがあなたに役立つかどうか教えてください。
他のヒント
ViewControllerがナビゲーションスタックで押し出されたとき(新しいビューコントローダーがプッシュされます)、たとえそれ自体が解放されていなくても(ナビゲーションコントローラースタックを保持している)ことを覚えておく価値があります。 そのmaimビューは(もちろんすべてのサブビューで)リリースされています。
したがって、このタイプのクラッシュは、主にメモリ管理のUI部分を示しています(私のケースでした。
UinavigationControllerがメモリを管理する方法を誰かが理解するのに役立つことを願っています。
所属していません StackOverflow