在基于导航的应用程序中popViewControllerAnimated时的EXC_BAD_ACCESS

时间:2010-12-07 22:44:42

标签: iphone uinavigationcontroller crash navigation popviewcontroller

我无法弄清楚为什么在弹出导航堆栈中的上一个视图控制器时会崩溃。 问题是我正在使用自定义导航栏(原始隐藏,我的自定义按钮触发导航 - 推送和弹出 - 而不是)。

跟踪我得到:

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

2 个答案:

答案 0 :(得分:3)

值得记住的是,当视图控制器在导航堆栈中被推开时(新视图控制器被推入),即使它本身没有被释放(保留在导航控制器堆栈中),它的主视图正在你发布了(当然还有所有的子视图)。

因此,这种类型的崩溃将主要指向内存管理的UI部分(最可能是自动释放的UIImages的双重释放,这是我的情况; - )。

希望有人能够理解UINavigationController如何管理内存。

答案 1 :(得分:2)

我遇到了同样的问题,因为你的上次观点不再被保留。最好的方法是尝试通过制作属性并合成它来保留你以前的观点。

然后尝试使用

[self.navigationConroller popViewControllerAnimated:YES];

或弹出到所需的视图

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

或弹出到rootview

[self.navigationController popToRootViewControllerAnimated:YES];

请告诉我它是否对您有所帮助。因为当您尝试转到已经发布的视图时会出现此错误。