如果从viewDidLoad调用,则performSegueWithIdentifier不起作用

时间:2016-05-19 08:20:54

标签: swift segue

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

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

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

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

这是checkStoredUser()

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

如您所见,我根据loadingVM.returnStoredUserStatus()返回的内容决定从何处开始。我确信这会返回它应该返回的内容,但没有任何反应。

这是prepareForSegue()

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

我做了一些挖掘工作,发现了一个似乎有效的奇怪建议但不提这样做是不切实际的:

ERROR:  'The input document is not a stylesheet (the XSL namespace is not declared in the root element).'
FATAL ERROR:  'Could not compile stylesheet'
javax.xml.transform.TransformerConfigurationException: Could not compile stylesheet
    at org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:832)
    at org.apache.xalan.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:618)

任何人都可以向我解释这里发生了什么,为什么这不起作用以及如何让它正常工作?这是我第一次遇到这个,我似乎无法找到任何相关信息。

1 个答案:

答案 0 :(得分:14)

<强>说明

当您致电checkStoredUser()时,您的视图尚未显示。

EASY FIX:

将它放在viewDidAppear()中,如下所示:

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