本文介绍了如果从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不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!