我在确定是否显示登录/注册视图控制器或登录的视图控制器之前,我试图验证是否有用户。我遇到的问题是,为了检查是否存在用户,我必须等待viewDidAppear
,因为出于某种原因,如果我在{{1}中运行检查,则用户始终为nil
}}
我正在使用Parse作为我的用户系统,但我不确定这是否是问题的一部分。下面的代码工作正常,除了viewDidLoad
的视图在执行ViewController
行之前的瞬间加载。
我希望能够在if(PFUser.currentUser() != nil)
中运行用户签入,因此视图不必实际显示,但如果我这样做,用户始终会返回viewDidLoad
。
我尝试在登录/注册屏幕之前添加一个空白视图控制器,但这只是加载一个白色屏幕一秒钟。我尝试在故事板启动屏幕中进行此操作,但这是不允许的(我完全相信),我可以创建一个视图,它是启动屏幕的副本并从那里运行它,但这看起来有点像黑客。
这样做的正确方法是什么?我认为这是大多数应用程序中常见的事情,我无法弄清楚执行nil
语句的位置。
if
答案 0 :(得分:1)
我在swift中并不知道,但在目标c中,它就像被归入viewDidLoad
登陆页一样简单:
PFUser *user = [PFUser currentUser];
if( user )
{
//user's session token is still valid, navigate to appropriate page
}
else
{
//display landing page to sign up / log in
}
答案 1 :(得分:1)
您可以将代码放入application(_:, didFinishLaunchingWithOptions:)
。
if let user = PFUser.currentUser() {
// Code to execute if user is logged in
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewControllerWithIdentifier("VCIdentifier")
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
} else {
// Default screen you set in info plist.
}
答案 2 :(得分:0)
尝试将其放入init中,如下所示:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//code
}
这是应该在ViewController生命周期中调用的第一件事
或者,尝试在viewWillAppear中使用int:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
//code
}