导致运行时崩溃!

时间:2010-11-18 15:19:47

标签: iphone uinavigationcontroller

我的UINavigationController中有3个视图控制器。如果我使用pushViewController和popViewController在视图控制器之间切换,一切都还可以。

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

[UIBarButtonItem performSelector:withObject:withObject]:消息到解除分配的实例。

原始堆栈是A和B,接下来我将A和C设置为如下。

[delegate.navigationController setViewControllers:[NSArray arrayWithObjects:[[delegate.navigationController viewControllers] objectAtIndex:0],controllerC,nil] animated:YES];

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

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

2 个答案:

答案 0 :(得分:1)

事实上它只发生在动画:是的,我认为这是一个自动释放的竞争条件。你是否使用自动释放分配你的controllerC实例?如果是这样,请尝试避免这种情况,并在调用setViewControllers之后显式释放它。如果能解决您的问题,请告诉我。

不能声称我完全理解这里发生了什么,但是给它一个机会。

-S

答案 1 :(得分:0)

我有同样的问题,这对我来说肯定是一个iOS错误。对我有用的解决方法是首先推送新的视图控制器:

[navigationController pushViewController:controllerC animated:YES];

然后将视图控制器堆栈设置为正确的值(以消除其间的值):

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