2011-11-21 99 views
0

我对编程知之甚少,但我仍然试图编写一个程序,例如,你在视图控制器1中,按下一个按钮,它会将你带到一个随机选择的视图控制器,让我们说视图控制器3和视图控制器3中,你可以按另一个按钮,它会带你到另一个随机选择的视图控制器,控制器2等..在视图控制器之间随机切换 - 程序崩溃

它的工作原理,但我明显做错了什么,因为程序崩溃3次或更少的次数,我按下按钮。

下面是按下的按钮的动作代码:

- (IBAction)next { 
// Get random value between 1 and 3 
int y = (arc4random()%3)+1; 

if (y == 1){ 
    [navigationController pushViewController:viewController animated:YES]; 
} 
else if (y == 2){ 
    [navigationController pushViewController:viewController2 animated:YES]; 
} 
else 
    [navigationController pushViewController:viewController3 animated:YES]; 

}

BTW任何与“Y”和arc4random在这部分只是用来做。

有人能告诉我为什么它会崩溃吗? (我是前面说过的初学者) 谢谢!

+0

请引用crash-log-message,如果这不是确定性堆栈跟踪的重要部分。 – Till

+0

你能显示你的代码,初始化viewController/2/3变量吗? – Denis

+0

看起来您可能没有正确保留您的视图控制器 – Ben

回答

0

苹果文档(http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html)说,大约pushViewController

重要提示:在iOS系统2.2如果参数viewController 中的对象已位于导航堆栈上,则此方法将引发 异常。在iOS的早期版本中,该方法根本不做任何事情。

这就是你所处的情况,你试图推动已经在堆叠上的控制器。

你感兴趣的方法

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 

这样做:

[navigationController setViewControllers:[NSArray arrayWithObject: ... ]]; 

而不是...把你的UIViewController

+0

所以我当时就是这样......你不能将视图控制器多次推入同一个导航控制器。 – trojanfoe

+0

是的,你是对的 –

+0

谢谢!现在它可以工作。 – EatsDinosaurs

0

我是不是有点肯定的,但也可能是原因,请尝试一次:

可能是,如果你推一个viewc ontroller一次,你不能再推它,直到你弹出它,因为它已经在堆栈中。所以你可能需要对代码进行一些修改。

if (y == 1){ 
    if(isVC1Pushed == NO) 

{ 

    [navigationController pushViewController:viewController animated:YES]; 
isVC1Pushed = YES 
} 
else{ 
[navigationController popToViewController:viewController animated:YES]; 
isVC1Pushed = NO;} 

} 
    } 

将布尔初始化为NO。对其他视图控制器也一样。

+0

这是原因,但我尝试了与另一个代码,现在它的作品,谢谢反正! – EatsDinosaurs

+0

对不起,我犯了一个小小的逻辑错误..我希望这不会伤害,因为你有这个想法.. :) – utsabiem