Parse - 如何在加载视图之前检查登录用户?
Parse - How do I check for a logged in user before the view loads?
我试图在决定是否显示 login/signup 视图控制器或已登录的视图控制器之前验证是否有用户。我 运行 遇到的问题是,要检查用户是否存在,我必须等待 viewDidAppear
,因为出于某种原因,如果我 运行 签入 viewDidLoad
.
我正在为我的用户系统使用 Parse,但我不确定这是否是问题的一部分。下面的代码工作正常,除了 ViewController
的视图在执行 if(PFUser.currentUser() != nil)
行之前的一瞬间被加载。
我希望能够 运行 用户签入 viewDidLoad
因此视图不必实际出现,但用户总是 return nil
如果我这样做。
我试过在 login/signup 屏幕之前添加一个空白视图控制器,但这只会加载一个白色屏幕一秒钟。我尝试在情节提要启动屏幕上这样做,但这是不允许的(我相信有充分的理由),我可以创建一个视图,它是启动屏幕的副本,并从那里 运行 它,但这似乎有点像黑客一样。
这样做的正确方法是什么?我认为这是大多数应用程序中常见的事情,我只是不知道在哪里执行 if
语句。
import UIKit
import Parse
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if (PFUser.currentUser() != nil) {
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("summaryView")
self.presentViewController(vc, animated: true, completion: nil)
}
}
}
我在 swift 中不知道,但在 objective-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
}
尝试将其放入 init 中,如下所示:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//code
}
这是 ViewController 生命周期中应该调用的第一件事
或者,尝试在 viewWillAppear 中使用 int:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
//code
}
您可以将您的代码放入 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.
}
我试图在决定是否显示 login/signup 视图控制器或已登录的视图控制器之前验证是否有用户。我 运行 遇到的问题是,要检查用户是否存在,我必须等待 viewDidAppear
,因为出于某种原因,如果我 运行 签入 viewDidLoad
.
我正在为我的用户系统使用 Parse,但我不确定这是否是问题的一部分。下面的代码工作正常,除了 ViewController
的视图在执行 if(PFUser.currentUser() != nil)
行之前的一瞬间被加载。
我希望能够 运行 用户签入 viewDidLoad
因此视图不必实际出现,但用户总是 return nil
如果我这样做。
我试过在 login/signup 屏幕之前添加一个空白视图控制器,但这只会加载一个白色屏幕一秒钟。我尝试在情节提要启动屏幕上这样做,但这是不允许的(我相信有充分的理由),我可以创建一个视图,它是启动屏幕的副本,并从那里 运行 它,但这似乎有点像黑客一样。
这样做的正确方法是什么?我认为这是大多数应用程序中常见的事情,我只是不知道在哪里执行 if
语句。
import UIKit
import Parse
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
if (PFUser.currentUser() != nil) {
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("summaryView")
self.presentViewController(vc, animated: true, completion: nil)
}
}
}
我在 swift 中不知道,但在 objective-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
}
尝试将其放入 init 中,如下所示:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//code
}
这是 ViewController 生命周期中应该调用的第一件事
或者,尝试在 viewWillAppear 中使用 int:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
//code
}
您可以将您的代码放入 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.
}