0

初学者警报:我正在使用 IOS 13.6 做 Swift 11.6。我是 Swift 的初学者,我正在尝试检查我的用户以前是否登录过。为此,我使用了用户默认值,这似乎工作正常。问题是当我在 Scenedelgate 中初始化我的视图控制器时,它似乎无法正常工作 - 我只得到一个黑屏。

另一个注意事项是我的主屏幕上有一个侧边菜单,所以我试图初始化 UINavigationController,然后是里面的 HomeViewController

这是我的场景委托代码:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

var window: UIWindow?
var storyboard: UIStoryboard?
var view: UIView?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

         guard let _ = (scene as? UIWindowScene) else {return}
    let def = UserDefaults.standard
               let is_authenticated = def.bool(forKey: "is_authenticated") // return false if not found or stored value

               if is_authenticated {
                   // user logged in
                self.view?.window?.rootViewController = UINavigationController(rootViewController: HomeViewController())
                self.view?.window?.makeKeyAndVisible()
                   }
}

编辑1:这是我的用户默认功能的样子:

 func saveLoggedState() {

    let def = UserDefaults.standard
    def.set(true, forKey: "is_authenticated") // save true flag to UserDefaults
    def.synchronize()

}

编辑 2: 这是我的模拟器的外观

编辑 3: 这是我的视图控制器的外观

编辑4:所以这就是问题所在。我决定尝试以编程方式将主视图控制器设置为白色,这显然有效。那么让我感到困惑的是,我在 HomeViewController 和 SideMenuNavigationController 中都看不到任何内容。我放了一个按钮和一个标签,但它们没有出现。

感谢您提供的任何建议。我是一个完整的新手,所以我真的不知道我在做什么。任何帮助表示赞赏。

谢谢!

4

2 回答 2

0

这一行是错误的:

self.view?.window?.rootViewController = UINavigationController(rootViewController: HomeViewController())

特别是,问题是您的代码中的这个短语:

HomeViewController()

这会创建一个新的空白 HomeViewController,而不是您在情节提要中设计的实例。要获得该实例,请告诉故事板为您实例化它。

于 2020-08-09T01:59:37.240 回答
-1

尝试添加 windowScene 并正确显示根控制器,如下所示:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

     guard let windowScene = (scene as? UIWindowScene) else {return}

     let def = UserDefaults.standard
     let is_authenticated = def.bool(forKey: "is_authenticated") // return false if not found or stored value

      if is_authenticated {
      // user logged in
      window = UIWindow(windowScene: windowScene)
      window?.makeKeyAndVisible()
      let controller = UINavigationController(rootViewController: HomeViewController())
      window?.rootViewController = controller
    }
 }

如果您的用户默认工作正确, HomeViewController() 会显示您...

于 2020-08-08T05:43:53.567 回答