prepareForSegue没有打开新视图

时间:2015-02-23 00:10:17

标签: ios swift segue uistoryboardsegue

我有一个被调用的视图控制器。它有一些检查,如果它们不符合,它不需要显示这个视图控制器,我的应用程序中的下一个视图控制器将被调用。这部分不起作用。

我有以下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工作正常。

任何想法都是为什么?

我意识到在我到达这里之前我应该​​检查一下这个视图控制器。我试图避免两次编写代码,因为视图中显示的数据会隐藏或显示某些标签和按钮。我还没有找到一个很好的方法让我解决这个问题,因为我已经编写了这些检查,试图绕过视图控制器本身,具体取决于值。想什么?谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码无法正常工作,因为您正在viewDidLoad()内拨打电话。您需要从viewDidAppear()调用它 - 请参阅this question for more details

就代码重复问题而言,我会尝试从视图控制器中删除所有游戏逻辑。拥有一个更大,更高级别的对象来维护游戏状态,并决定在任何给定时刻/场景中哪些视图控制器适用。然后,此对象可以将适当的segue标识符传递给视图控制器。这样,视图控制器不需要知道骰子或战斗或后方支持。