Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 11.5 IOS 13.5在Scenedelgate中设置视图控制器后出现黑屏_Ios_Swift_Xcode_Uiscenedelegate - Fatal编程技术网

Xcode 11.5 IOS 13.5在Scenedelgate中设置视图控制器后出现黑屏

Xcode 11.5 IOS 13.5在Scenedelgate中设置视图控制器后出现黑屏,ios,swift,xcode,uiscenedelegate,Ios,Swift,Xcode,Uiscenedelegate,初学者提示:我正在使用IOS 13.6执行Swift 11.6。我是Swift的初学者,我正在尝试检查我的用户以前是否登录过。为此,我使用了用户默认值,这似乎很好。问题是,当我在Scenedelgate中初始化视图控制器时,它似乎不起作用-我只得到一个黑屏 另一个注意事项是,我在主屏幕上有一个侧菜单,所以我尝试初始化UINavigationController,然后初始化其中的HomeViewController 以下是我的场景代理代码: class SceneDelegate: UIRespo

初学者提示:我正在使用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或SideMenugationController中的任何内容。我放了一个按钮和一个标签,但它们没有出现

谢谢你能给我的建议。我是个完全的新手,所以我真的不知道我在做什么。谢谢你的帮助


谢谢

尝试添加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()显示的内容…

此行错误:

self.view?.window?.rootViewController = UINavigationController(rootViewController: HomeViewController())
尤其是代码中的这句话:

HomeViewController()

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

您好,我刚刚尝试过这样做,但仍然有相同的黑屏。还有人能帮忙吗?你把代码都复制粘贴了吗?因为它工作完美!!!家庭控制器里有什么?它是一个空的控制器吗?不要更正你的代码,复制并粘贴我的…你是在情节提要中设计UI还是以编程方式设计UI?嗨,Fabio!感谢您再次回复。HomeController在导航控件中有一个用于侧菜单的条形按钮,如果它起作用,您将看到一个白色菜单,在角落中有一个按钮。是否要我删除原始代码,然后添加您的代码?因为那是我为我自己所做的。另外,我正在以故事板和编程的方式设计UI,尽管它主要是在故事板中。您可以在顶部看到一个白色条,这意味着有一个导航条,但问题是实际的主屏幕是黑色的。你知道为什么吗?我将尝试发送一个屏幕截图。一个场景代理没有视图,给它一个视图没有任何作用,那么谈论它的视图有什么意义呢?同样,场景代理没有故事板。一般来说,代码没有意义。如果问题是如何在场景代理中执行登录屏幕,我这里有一个工作示例:至于视图控制器的黑色,您没有显示任何有关视图控制器的内容,那么我们如何知道它不是黑色的?据我们所知,您的代码工作得非常完美!嗨,谢谢你的建议。我将在编辑中添加我的主视图控制器的外观,希望这会有所帮助。请参阅我关于此主题的文章,谢谢!我根本没有意识到这一点。很抱歉,我试着接受这两个问题的解决方案,但都不起作用,我会把它改成你的!很抱歉。我是堆栈溢出的新手。如果你想知道的话,我尝试接受Fabio的,因为我最初使用的是self和view,而不是窗口。再次感谢你们两位的帮助!我不是说你应该接受我的答案,我是说另一个答案是错误的,因为它和你的错误完全相同,所以它不可能是正确的。你自己说它给你带来了和以前一样的黑屏。