【问题标题】:How to launch new project without a storyboard >= iOS 13 in Xcode 11?如何在 Xcode 11 中启动没有故事板 >= iOS 13 的新项目?
【发布时间】:2019-11-01 08:00:05
【问题描述】:

Xcode 11 与 iOS 13 现在启动时的设置与以前略有不同,将许多功能从 AppDelegate.m 文件移动到名为 SceneDelegate.m 的新文件中 - 删除 Main.storyboard 并在 AppDelegate 中设置根视图控制器是不再是一个选项,导致以下错误:

-[AppDelegate window]: unrecognized selector sent to instance

如何在没有情节提要的情况下继续构建新项目?

【问题讨论】:

    标签: objective-c xcode ios13 xcode11


    【解决方案1】:

    查看这篇文章:Xcode 11.3 | [从项目中移除情节提要][1]

    第 1 步: 删除情节提要

    成功创建新项目后,导航到 Xcode 窗口左角的 Project Navigator。我们需要从这里删除 Main.storyboard 文件。

    第 2 步: 删除主界面

    然后移动到常规选项卡并在此处删除您的主界面链接并按回车键。

    第 3 步: 从 Info.plist 中删除 Storyboard 文件。

    从 Info.plist 中删除 Main.storyboard。

    第 4 步: 让您的应用在没有 Storyboard 的情况下运行。

    如果您在 Project Navigator 中仔细看过,您可以看到 2 个委托文件 AppDelegate.swift 和 SceneDelegate.swift。所以在之前的 Xcode 中,我们已经看到 AppDelegate.swift 中存在 UIWindow 变量,而现在对于 Xcode 11,它已经消失了。现在您可以在 SceneDelegate.swift 文件中看到 window 变量。 在此文件中,您需要为加载 xib 文件进行配置。

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let windowScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(frame: windowScene.coordinateSpace.bounds)
        window?.windowScene = windowScene
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()
    }
    

    ?就是这样! 现在您可以在没有 Storyboard 的情况下运行您的应用程序。

    GitHub sample project

    【讨论】:

      【解决方案2】:

      我正在运行 Xcode 11.4 并在 Objective-C 中运行它
      第 1 步:删除情节提要
      第 2 步:删除主界面
      第 3 步:删除 info.plist 中的情节提要
      第 4 步:在 Xcode11 中新增 SceneDelegate
      在所有 cmets 之后,我将此添加到 -(void)scene 方法中:

      self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
      self.window.windowScene = (UIWindowScene *)scene;
      self.window.rootViewController = [[UINavigationController alloc]
                           initWithRootViewController:ViewController.new];
      //self.window.rootViewController = [[ViewController alloc]init];
      self.window.backgroundColor = [UIColor whiteColor];
      [self.window makeKeyAndVisible];
      

      如您所见,这将 viewController 嵌入到 navigationController 中,但下面是没有的设置。
      希望这会有所帮助

      【讨论】:

      • 谢谢!我试图在 obj-c 中初始化窗口时设置窗口场景,而不是稍后设置属性,但是在点击文本字段时键盘没有出现。这为我解决了问题。
      【解决方案3】:

      以上所有答案都应该适合您。 1.删​​除Main.storyboard 2.删除info.plist中对Main.storyboard的引用 3. 添加窗口到SceneDelegate 4.设置rootviewcontroller

      如果您需要视觉效果,请查看我作为来源链接的视频。

      来源:https://youtu.be/2oo0tO1E9ys

      【讨论】:

        【解决方案4】:

        答案已经有问题:您需要添加窗口属性。 Xcode 11 不会生成它。

        【讨论】:

          【解决方案5】:

          您仍然可以在 Xcode 11 中使用 this empty application template

          【讨论】:

            【解决方案6】:

            第 1 步:

            在 SceneDelegate.swift 中:

            替换这一行:

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

            用这个:

            guard let windowScene = (scene as? UIWindowScene) else { return }
            window = UIWindow(windowScene: windowScene)
            window?.rootViewController = ViewController()
            window?.backgroundColor = .systemBackground // optional
            window?.makeKeyAndVisible()
            

            第 2 步: 从 info.plist 中删除这两个条目:

            • “应用场景清单...”下的“故事板名称”

            • “主情节提要文件基本名称”

            第 3 步。 删除 Main.storyboard 文件

            【讨论】:

              猜你喜欢
              • 2014-08-31
              • 2016-02-16
              • 2023-04-07
              • 1970-01-01
              • 1970-01-01
              • 2012-09-14
              • 1970-01-01
              • 1970-01-01
              • 2019-12-14
              相关资源
              最近更新 更多