我对编程知之甚少,但我仍然试图做一个例如你在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仅用于此部分。
有人可以告诉我为什么会崩溃吗? (我之前说的是初学者) 谢谢!
答案 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。对其他视图控制器也一样。