如果从viewDidLoad中调用performSegueWithIdentifier,它无法正常工作。

7

我有一个简单的应用程序有一个加载屏幕。在这里,我会检查NSUserDefaults中的一些用户详细信息,并跳转到登录或注册界面。

加载屏幕的viewDidLoad()方法如下:

override func viewDidLoad()
{
    super.viewDidLoad()

    loadingVM = LoadingVM() as LoadingVM

    print("LoadingVC")
    checkStoredUser()
}

这里是checkStoredUser()函数

func checkStoredUser()
{
    storedUserStatus = loadingVM.returnStoredUserStatus()

    if(storedUserStatus == true)
    {
        performSegueWithIdentifier("loadingToLoginVC", sender: self)
    }
    else
    {
        performSegueWithIdentifier("loadingToSignUpVC", sender: self)
    }
}

如您所见,我根据loadingVM.returnStoredUserStatus()返回的结果来决定接下来要做什么。我确信它会返回正确的结果,但是却没有任何反应。

这是prepareForSegue():

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    print("prepareForSegue")

    if(segue.identifier == "loadingToSignUpVC")
    {
        let signUpViewCotroller = (segue.destinationViewController as! LocalSignUpVC)
    }
    else if(segue.identifier == "loadingToLoginVC")
    {
        print("loadingToLoginVC")

        let loginViewCotroller = (segue.destinationViewController as! LoginVC)
    }
}

我进行了一些调查,发现一个看起来奇怪但似乎有效的建议,但这样做不太实用,更不应该这样做:

func checkStoredUser()
{
    storedUserStatus = loadingVM.returnStoredUserStatus()

    let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(1.0 * Double(NSEC_PER_SEC)))
    dispatch_after(delayTime, dispatch_get_main_queue())
    {
        if(self.storedUserStatus == false)
        {
            self.performSegueWithIdentifier("loadingToSignUpVC", sender: self)
        }
        else
        {
            self.performSegueWithIdentifier("loadingToLoginVC", sender: self)
        }
    }
}

有人可以向我解释这里发生了什么,为什么它不起作用以及如何使其正常工作吗?这是我第一次遇到这种情况,似乎找不到任何信息。

1个回答

18

解释:

在调用checkStoredUser()时,您的视图尚未出现。

简单修复:

像这样将其放入viewDidAppear()中:

override func viewDidAppear(animated:Bool) {
    super.viewDidAppear(false)
    checkStoredUser()
}

那很简单:))我以为如果我可以从viewDidLoad调用一个函数,比如doStuff(),从doStuff()执行一个segue就可以了,但我想这是有道理的。谢谢。 - daydr3am3r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接