来自viewDidAppear的Segue调用有效,但不是来自viewWillAppear

时间:2016-05-27 23:16:07

标签: ios swift segue

我在给定环境中有以下场景:

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开始工作的解决方案或建议,我将非常感激。

1 个答案:

答案 0 :(得分:8)

您无法在viewWillAppear方法中执行segues。这是因为视图尚未完全出现,并且无法转换到另一个视图。在这种情况下,我会有一个加载图像或类似的东西,如果不应该执行segue,它会逐渐消失。当然,这将在viewDidAppear方法中完成。