我有一个被调用的视图控制器。它有一些检查,如果它们不符合,它不需要显示这个视图控制器,我的应用程序中的下一个视图控制器将被调用。这部分不起作用。
我有以下IBAction:
@IBAction func nextBtnPressed(sender: UIButton!) {
if GlobalVars.diceRollFirst == true {
performSegueWithIdentifier("showCombatOutcomeFromRearSupport", sender: self)
}
if GlobalVars.diceRollFirst == false {
performSegueWithIdentifier("showDiceRollFromRearSupport", sender: self)
}
}
哪个正常。
但是在我的viewDidLoad()中,我有以下代码: 经过多次检查后,在viewDidLoad中设置了rearsupportfound。它最初是假的,如果满足任何检查则设置为true。
if !rearsupportfound {
println("rearsupportfound is: \(rearsupportfound)")
if GlobalVars.diceRollFirst == true {
performSegueWithIdentifier("showCombatOutcomeFromRearSupport", sender: self)
}
if GlobalVars.diceRollFirst == false {
performSegueWithIdentifier("showDiceRollFromRearSupport", sender: self)
}
}
此代码不执行任何操作。我的意思是它确实得到了这段代码:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
if segue.identifier == "showCombatOutcomeFromRearSupport" {
println("segue: showCombatOutcomeFromRearSupport sender: \(sender)")
let vc = segue.destinationViewController as CombatOutcomeViewController
vc.army1 = army1
vc.army2 = army2
}
if segue.identifier == "showDiceRollFromRearSupport" {
println("segue: showDiceRollFromRearSupport")
let vc = segue.destinationViewController as DiceRollViewController
vc.army1 = army1
vc.army2 = army2
}
}
我得到了println条目,但是从未显示请求的视图控制器,当前的视图控制器是。当按下按钮时,相同的perpareForSegue工作正常。
任何想法都是为什么?
我意识到在我到达这里之前我应该检查一下这个视图控制器。我试图避免两次编写代码,因为视图中显示的数据会隐藏或显示某些标签和按钮。我还没有找到一个很好的方法让我解决这个问题,因为我已经编写了这些检查,试图绕过视图控制器本身,具体取决于值。想什么?谢谢。
答案 0 :(得分:1)
您的代码无法正常工作,因为您正在viewDidLoad()
内拨打电话。您需要从viewDidAppear()
调用它 - 请参阅this question for more details。
就代码重复问题而言,我会尝试从视图控制器中删除所有游戏逻辑。拥有一个更大,更高级别的对象来维护游戏状态,并决定在任何给定时刻/场景中哪些视图控制器适用。然后,此对象可以将适当的segue标识符传递给视图控制器。这样,视图控制器不需要知道骰子或战斗或后方支持。