0

初心者向けの警告: IOS 13.6 で Swift 11.6 を実行しています。私は Swift の初心者で、ユーザーが以前にログインしたことがあるかどうかを確認しようとしています。このために、私はユーザーデフォルトを使用しましたが、これはうまく機能しているようです。問題は、Scenedelgate でビュー コントローラーを初期化するときに、動作していないように見えることです。黒い画面しか表示されません。

もう1つの注意点は、ホーム画面にサイドメニューがあるため、 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 に答える