如果从viewDidLoad调用,则PerformSgueWithLocator不起作用 [英] performSegueWithIdentifier not working if called from viewDidLoad

查看:16
本文介绍了如果从viewDidLoad调用,则PerformSgueWithLocator不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

加载屏幕的viewDidLoad()如下所示:

override func viewDidLoad()
{
    super.viewDidLoad()

    loadingVM = LoadingVM() as LoadingVM

    print("LoadingVC")
    checkStoredUser()
}

这里是check StoredUser()

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

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

如您所见,我根据loadingVM.reurStoredUserStatus()返回的内容决定从哪里开始。我确信这返回了它应该返回的内容,但什么也没有发生。

下面是prepaareForSegue()

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)
        }
    }
}

有人能向我解释一下这是怎么回事吗?为什么这不起作用,以及如何让它正常工作?这是我第一次遇到这种情况,我似乎无法找到有关此问题的任何信息。

推荐答案

解释:

当您调用checkStoredUser()时,您的视图尚未显示。

轻松修复:

放入viewDidAppear()如下:

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

这篇关于如果从viewDidLoad调用,则PerformSgueWithLocator不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆