SWRevealViewController delegate nil



首先,我只是盯着iOS,所以也许这是一个愚蠢的问题,但我无法弄清楚。我正在使用SWRevealViewController作为侧边栏菜单,我使用delegate来检测FrontViewPosition并有这行代码:self.revealViewController().delegate = self viewDidLoad并且出现了问题(如果我将这一行放在viewDidAppear中也是如此(。我正在使用FirebaseAuth并且有LoginViewController所以当我第一次登录时会抛出异常

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

正如我self.revealViewController().delegate = self所说。当然,我可以通过简单地nil签入来避免这种情况,但是revealViewController()将无法正常工作,因为它没有注册。

奇怪的事情,至少对我来说,下次FirebaseAuth保存我的凭据并且应用程序直接启动后,MainViewController一切都会正常工作。唯一的问题是当我第一次登录或注销并再次登录时。我performSegue登录成功后启动MainViewController。有人可以告诉我问题出在哪里吗?谢谢

我在带有登录屏幕的项目中使用了SWRevealViewController

我如何处理用户登录是:

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

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

  4. 然后在MainViewController viewDidLoad中添加了下面的代码。

    // To show Menu
    if (self.revealViewController() != nil) {
        menuButton.target = self.revealViewController()
        menuButton.action =  #selector(SWRevealViewController.revealToggle(_:))
        self.view.addGestureRecognizer(revealViewController().panGestureRecognizer())
    }
    

我希望这对你有所帮助。

目前我找到了适用于我的方案的解决方案。不过,如果有人知道问题是什么,请解释一下。我很高兴将您的答案标记为正确答案。我不知道是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做了同样的事情感谢所有试图提供帮助的人。

相关内容

  • 没有找到相关文章

最新更新