我在给定环境中有以下场景:
Xcode v7.3.1
斯威夫特2
在登录viewController中,我最初在viewWillAppear方法中进行了以下segue调用,以便在用户已登录时绕过登录屏幕:
override func viewWillAppear(animated: Bool) {
if PFUser.currentUser() != nil {
self.performSegueWithIdentifier("login", sender: self)
}
}
segue没有工作,所以我设置了一个断点,在那里进行segue调用并验证它确实被击中了。我也逐步完成调用并验证没有抛出异常,但由于某种原因,不执行segue。
但是,我在viewDidAppear方法中添加了相同的调用:
override func viewDidAppear(animated: Bool) {
if PFUser.currentUser() != nil {
self.performSegueWithIdentifier("login", sender: self)
}
}
同样,我验证了segue调用正在被命中,但在这种情况下,实际上会执行segue。因此,我想知道为什么完全相同的调用在viewWillAppear方法中调用时不起作用,但在viewDidAppear中按预期工作。最令人费解的部分是看起来正在进行调用,但没有观察到预期的行为。我试图谷歌搜索其他任何遇到此问题的人,但无法找到任何东西。
我想我可以忍受从viewWillAppear调用它,但是在重定向之前有一个简短的登录屏幕外观,这有点令人讨厌。如果有人有关于如何从viewWillAppear开始工作的解决方案或建议,我将非常感激。
答案 0 :(得分:8)
您无法在viewWillAppear
方法中执行segues。这是因为视图尚未完全出现,并且无法转换到另一个视图。在这种情况下,我会有一个加载图像或类似的东西,如果不应该执行segue,它会逐渐消失。当然,这将在viewDidAppear
方法中完成。