解析 - 在AppDelegate中绕过登录

时间:2016-01-21 21:59:38

标签: ios swift parse-platform

如果当前用户不是nil,我正在努力绕过登录屏幕。为此,我遵循了here发布的建议。运行代码后,我在模拟器中看到一个空白的白色视图,没有显示任何错误。这是代码:

 storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle());
        let currentUser = PFUser.currentUser()
        print(currentUser)
        if currentUser != nil {
            self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeViewController");
        }

值得一提的是HomeViewController基于Tab导航。我错过了什么?

我的设置是:

  • 启动应用程序,第一个视图是登录视图(带注册按钮)。这个初始视图是SignInViewController,我嵌入了一个UINavigationController。
  • 用户可以通过提供凭据登录(如果正确,则执行segue以重定向到HomeViewController)
  • 用户可以注册并按照步骤操作(多个控制器)。最后,它们将被重定向到Home View Controller。

3 个答案:

答案 0 :(得分:4)

我假设您的主标签栏控制器具有标识符"HomeViewController",并且您的登录视图控制器具有标识符"SignInViewController",并且此代码位于您的didFinishLaunchingWithOptions() AppDelegate方法中:

storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
if let currentUser = PFUser.currentUser() { // currentUser is not nil
    // set up app for valid in user
    self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("HomeViewController")
    return true // don't load the rootViewController from your storyboard (if you have an initial view set)
} else { // there is no current user
    // set up app for new or non logged in user
    self.window?.rootViewController = storyboard?.instantiateViewControllerWithIdentifier("SignInViewController")
    return true
}

根据您的评论,听起来您有一个导航控制器,其根视图控制器是您在视图控制器中的标志,这就是为什么当您切换到标签栏控制器时,您会得到一个导航栏。

由于我的方法您没有获得segue(以及登录控制器的导航栏),请初始化新的UINavigationController并将其rootViewController设置为您的if let currentUser = PFUser.currentUser() { // currentUser is not nil // load tab bar controller let tabBarController = storyboard?.instantiateViewControllerWithIdentifier("TabBarViewController") // initialize a new navigation controller with the tab bar controller as its rootViewController let navC = UINavigationController(rootViewController: tabBarController) // set the window's root view controller to be your new navigation controller self.window?.rootViewController = navC } 标签栏控制器:

http://

答案 1 :(得分:1)

你能提供更多信息吗?

这是我检查某人是否已登录的方式

override func viewDidAppear(animated: Bool) {
        let currentUser = PFUser.currentUser()
                if currentUser != nil {
                  self.performSegueWithIdentifier("nameOfTheSegueIdentifier", sender: self)

            }
}

答案 2 :(得分:1)

通常PFUser.currentUser()不是零。您应该使用PFUser.currentUser().username。在登录/注册中使用此代码 ViewController (不是AppDelegate(它工作正常))

override func viewDidAppear(animated: Bool) {
    if PFUser.currentUser().username != nil {
        self.performSegueWithIdentifier("SEGUE", sender: self)
    }
}

此代码中需要注意两件事:它是在viewDidAppear方法中执行的;不是viewDidLoad。在视图出现之前,您无法执行任何segue。此外,SEGUE是您的segue名称的临时占位符。此segue应将用户转移到主页面。

注意:给定代码将显示login/signup viewcontroller's场景大约一秒钟。我建议在UIImageView上放置与视图具有相同框架的ViewController(覆盖整个屏幕)。如果用户名等于nil,则可以添加一个说imageView.alpha = 0的else语句(在viewDidLoad中将alpha设置为1)。希望这会有所帮助。