随机切换视图控制器 - 程序崩溃

时间:2011-11-21 14:25:18

标签: iphone objective-c ios xcode ipad

我对编程知之甚少,但我仍然试图做一个例如你在View Controller 1中,按下一个按钮,它会带你到一个随机选择的View Controller,比如View Controller 3,你可以在View Controller 3中按下另一个按钮,它会带你到另一个随机选择的View Controller,让我们说View控制器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仅用于此部分。

有人可以告诉我为什么会崩溃吗? (我之前说的是初学者) 谢谢!

2 个答案:

答案 0 :(得分:0)

Apple文档(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

答案 1 :(得分:0)

我不确定,但可能是原因,请继续尝试:

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

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

{

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

}
    }

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