2010-11-18 166 views
0

我在我的UINavigationController中有3个视图控制器。如果我使用pushViewController和popViewController在视图控制器之间切换,一切都会好起来的。导致运行时崩溃!

但是,如果我调用setViewControllers以重新排列它们的顺序,当我触摸向后导航栏按钮时,我会崩溃。

[UIBarButtonItem performSelector:withObject:withObject]:message to deallocated instance。

原始堆栈是A和B,接下来我将A和C设置为如下波纹管。我们可以通过下面的例子来说明如何使用这个控件来实现这个控件。

我发现奇怪的是...,如果我用动画调用该方法:否,不会发生崩溃。

我的代码的动画参数的秘密是什么?请帮助我... :(

回答

1

事实上,它只发生在动画:是我认为这是一个autorelease竞争条件。你是否用autorelease分配你的controllerC实例?如果是的话,尝试避免并明确释放它调用setViewControllers代替了。让我知道是否能解决您的问题。

不能要求我完全理解这里发生了什么,但给这一个镜头。

-S

0

我同样的问题,它肯定对我来说就像是一个iOS bug。为我工作的解决方法是首先推动新视图控制器:

[navigationController pushViewController:controllerC animated:YES]; 

然后视图控制器的堆叠设置为适当的值(消除之间的那些):

NSArray *newViewControllers = [NSArray arrayWithObjects:controllerA, controllerC, nil]; 
[navigationController setViewControllers:newViewControllers animated:NO]; 
+0

有点奇怪...,它隐藏leftBarButton导航控制器上。消失,但我可以触摸它。无论如何,没有崩溃。这个SDK到底是什么? – 2010-11-19 15:28:18

+0

你找到任何解决方案吗?如果是,请分享。我面临着一个类似的问题。左栏按钮消失但可以触摸。 – Pria 2011-06-13 04:58:17