[英]Randomly switch between View Controllers- Program crashes
我对编程不太了解,但是我仍然尝试做一个程序,例如您在View Controller 1中,按一个按钮,然后将您带到随机选择的View Controller,比如说View Controller 3和View Controller 3您可以按下另一个按钮,将您带到另一个随机选择的View Controller,比如说View Controller 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];
}
顺便说一句,这与“ y”和arc4random有关。
有人可以告诉我为什么它崩溃了吗? (正如我之前所说,我是初学者)谢谢!
苹果文档(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
我不确定,但可能是原因,请尝试一次:
可能是,如果您一次按下一个视图控制器,您将无法再次按下它,直到将其弹出为止,因为它已经在堆栈中。 因此,您可能需要对代码进行一些修改。
if (y == 1){
if(isVC1Pushed == NO)
{
[navigationController pushViewController:viewController animated:YES];
isVC1Pushed = YES
}
else{
[navigationController popToViewController:viewController animated:YES];
isVC1Pushed = NO;}
}
}
将布尔值初始化为NO。 对其他视图控制器也执行相同的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.