performSegue(withIdentifier .......)无效

时间:2017-08-01 18:31:22

标签: ios swift segue

长话短说,我的segue无法执行到我已创建的下一个控制器。很多帮助将不胜感激。

    override func viewDidLoad() {
        super.viewDidLoad()


        var returnValue: Int = UserDefaults.standard.integer(forKey: "quiz1Validation")
        if (returnValue == 1)
        {
            performSegue(withIdentifier: "completed", sender: self)
        }
        else {
        var returnValue: Int = UserDefaults.standard.integer(forKey: "userScore")
        scorelabel.text = "Score:\(returnValue)"
        RandomQuestions()
    }

}

4 个答案:

答案 0 :(得分:5)

您无法从viewDidLoad调用performSeugue。你必须从viewDidAppear调用它。

答案 1 :(得分:0)

建议不要在viewDidLoad上执行segue,因为你的viewController还没有在堆栈中。

作为解决方法你可以尝试这个,但我会改变逻辑不使用它:

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
    performSegue(withIdentifier: "completed", sender: self)
}

答案 2 :(得分:0)

我认为@Kinja很可能试图通过在viewDidLoad方法本身中调用performSegue来基于特定状态(在用户默认值中存档)跳过特定的视图控制器。

所以我建议尝试以下方法而不是执行performSegue -

How to load all view controllers storyboard, but skip the natural sequence and go direct to a specific view?

希望这会有所帮助。

我制作了一个示例代码来演示相同的@

git clone https://shreekara@bitbucket.org/shreekara/viewcontrollers.git

检查2个视图控制器是如何直接填充的

let storyboard = UIStoryboard(name: "Main", bundle: nil)

let viewcontroller2 = storyboard.instantiateViewController(withIdentifier: "view2")
self.navigationController?.pushViewController(viewcontroller2, animated:false)

let viewcontroller3 = storyboard.instantiateViewController(withIdentifier: "view3")
self.navigationController?.pushViewController(viewcontroller3, animated:false)

答案 3 :(得分:0)

我似乎被迫处理这个问题的方法是创建一个@objc选择器,然后使用perform()从viewDidLoad()调用它。似乎只适用于" afterDelay"版本:

@objc func showCompleted() {
  self.performSegue(withIdentifier: "completed", sender: self)
}

override func viewDidLoad() {
  super.viewDidLoad()
  var returnValue: Int = UserDefaults.standard.integer(forKey: "quiz1Validation")
  if returnValue == 1 {
    self.perform(#selector(self.showCompleted), with: nil, afterDelay: 0)
  }
  else {
    // ...the rest of your code
  }
}

看起来像是对我的黑客攻击,所以我很想听听是否有其他人在更多" Swifty"方式。