解析 - 如何在加载视图之前检查登录用户?

时间:2015-12-09 22:43:49

标签: ios swift parse-platform viewdidload viewdidappear

我在确定是否显示登录/注册视图控制器或登录的视图控制器之前,我试图验证是否有用户。我遇到的问题是,为了检查是否存在用户,我必须等待viewDidAppear,因为出于某种原因,如果我在{{1}中运行检查,则用户始终为nil }}

我正在使用Parse作为我的用户系统,但我不确定这是否是问题的一部分。下面的代码工作正常,除了viewDidLoad的视图在执行ViewController行之前的瞬间加载。

我希望能够在if(PFUser.currentUser() != nil)中运行用户签入,因此视图不必实际显示,但如果我这样做,用户始终会返回viewDidLoad

我尝试在登录/注册屏幕之前添加一个空白视图控制器,但这只是加载一个白色屏幕一秒钟。我尝试在故事板启动屏幕中进行此操作,但这是不允许的(我完全相信),我可以创建一个视图,它是启动屏幕的副本并从那里运行它,但这看起来有点像黑客。

这样做的正确方法是什么?我认为这是大多数应用程序中常见的事情,我无法弄清楚执行nil语句的位置。

if

3 个答案:

答案 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
}