SWRevealViewController委托nil

时间:2018-03-08 11:22:44

标签: ios swift null

首先我只是盯着iOS,所以这可能是一些虚拟问题,但我无法弄明白。我使用delegate进行侧边栏菜单,并使用FrontViewPosition检测self.revealViewController().delegate = self并在viewDidLoad中使用viewDidAppear这段代码出现问题(如果我把这一行放在FirebaseAuth中)同样的事情。我使用LoginViewController并拥有self.revealViewController().delegate = self所以当我第一次登录时会抛出异常

  

线程1:致命错误:在解包可选值时意外发现nil

就像我说的那样nil。当然,我可以通过revealViewController()签入来避免这种情况,但是FirebaseAuth将无法正常工作,因为它没有注册。

奇怪的是,至少对我而言,下次MainViewController保存我的凭据并且应用程序直接在performSegue启动后,一切都会正常运行。唯一的问题是我第一次登录或退出并再次登录。登录成功后我MainViewController启动 time energy 0 2018-01-01 00:15:00 0.0000 1 2018-01-01 00:30:00 0.0000 2 2018-01-01 00:45:00 0.0000 3 2018-01-01 01:00:00 0.0000 4 2018-01-01 01:15:00 0.0000 5 2018-01-01 01:30:00 0.0000 6 2018-01-01 01:45:00 0.0000 7 2018-01-01 02:00:00 0.0000 8 2018-01-01 02:15:00 0.0000 9 2018-01-01 02:30:00 0.0000 10 2018-01-01 02:45:00 0.0000 11 2018-01-01 03:00:00 0.0000 12 2018-01-01 03:15:00 0.0000 13 2018-01-01 03:30:00 0.0000 14 2018-01-01 03:45:00 0.0000 15 2018-01-01 04:00:00 0.0000 16 2018-01-01 04:15:00 0.0000 17 2018-01-01 04:30:00 0.0000 18 2018-01-01 04:45:00 0.0000 19 2018-01-01 05:00:00 0.0000 20 2018-01-01 05:15:00 0.0000 21 2018-01-01 05:30:00 0.9392 22 2018-01-01 05:45:00 2.8788 23 2018-01-01 06:00:00 5.5768 24 2018-01-01 06:15:00 8.6660 25 2018-01-01 06:30:00 15.8648 26 2018-01-01 06:45:00 24.1760 27 2018-01-01 07:00:00 38.5324 28 2018-01-01 07:15:00 49.9292 29 2018-01-01 07:30:00 64.3788 。 谁能告诉我问题出在哪里?感谢

2 个答案:

答案 0 :(得分:1)

我在项目中使用SWRevealViewController登录屏幕。

我如何处理用户登录是:

  1. 将登录viewController设为初始视图控制器。
  2. 然后检查已登录的用户是否已在didFinishLaunchingWithOptions文件中的AppDelegate内登录。

    if (userDefaults.object(forKey:"user") != nil) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        self.window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
        self.window?.makeKeyAndVisible()
    }
    
  3. 如果用户已登录,则显示MainViewController。

  4. 然后在viewDidLoad的{​​{1}}中添加了以下代码。

    MainViewController
  5. 我希望这会对你有所帮助。

答案 1 :(得分:0)

目前,我找到了适用于我的方案的解决方案。如果有人知道问题是什么,请解释。我很高兴将您的答案标记为正确答案。我不知道SWRevealViewController或我的方法中的错误是不正确的。所以我做的是:

我在MainViewController viewWillAppear中进行了检查用户是否已登录,如下所示:

override func viewWillAppear(_ animated: Bool) {

    Auth.auth().addStateDidChangeListener() {
        auth, user in
        if user == nil {
            let loginController = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController
            self.present(loginController!, animated: true, completion: nil)
        }
    }
}

之后,当用户成功登录时,我只需dismiss LoginViewController并在MainViewController中处理必要的用户身份验证。我测试了这种方法似乎它正在发挥作用。我对SignUpViewController所做的一样 感谢所有试图提供帮助的人。