如果想要使用swift主故事板文件,那么app委托必须实现window属性

Eth*_*cus 30 iphone xcode simulator ios swift

我刚刚开发了一个应用程序,但是当在模拟器中运行时,调试器控制台会说:

The app delegate must implement the window property if it wants to use
a main storyboard file.
Run Code Online (Sandbox Code Playgroud)

我有一个app委托文件.消息的含义是什么,以及如何让我的应用程序运行?

mun*_*eeb 61

确保AppDelegate类中包含以下属性声明:

var window: UIWindow?
Run Code Online (Sandbox Code Playgroud)

  • 怎么仅仅申报财产就解决了问题!开发商确实是疯了。 (10认同)

iMu*_*hid 28

如果您在iOS 13.0之前的版本上运行项目,在这种情况下,您将面临问题。由于iOS 13及更高版本,应用程序的启动方式与早期版本不同。

  • 在iOS 13及更高版本中,使用UISceneDelegate对象来响应基于场景的应用程序中的生命周期事件

  • 在iOS 12及更早版本中,使用UIApplicationDelegate对象响应生命周期事件。

当您在iOS 12及更早版本中启动应用程序时,班级就像UIApplicationMainAppDelegate班级中一样期望window属性SceneDelegate。因此,如果您在AppDelegate类中添加以下行,则将解决您的问题。

var window: UIWindow?
Run Code Online (Sandbox Code Playgroud)

对于Objective-C

   @property (strong, nonatomic) UIWindow *window;
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到更多应用程序的生命周期

  • 我在 AppDelegate 类中写了这一行,并更改了主界面(目标 -> 常规 -> 主界面 = Main.storyboard。我仍然得到相同的 .Xcode 版本是 11.0 。如何修复它 (2认同)
  • 对于 Objective-C,将该属性添加到 AppDelegate.h 文件中。 (2认同)

Sra*_*van 26

我在 XCode 11 中创建新项目时收到此错误。我没有使用SwiftUI. 这是步骤,我已经考虑解决这个问题。

  1. 删除的Application Scene Manifest条目来自Info.plist
  2. 删除的SceneDelegate.swift文件
  3. 删除了AppDelegate.swift类中所有场景相关的方法
  4. var window: UIWindow?AppDelegate.swift类中添加属性

完成这些步骤后,我可以在 iOS 13 之前的版本上运行该应用程序。

[编辑]
最后,您的AppDelegate.swift文件应如下所示。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 如果您不使用 swiftUI 这应该是对我有用的正确答案。谢谢@Sarvan (2认同)

Tom*_*Tom 15

只是因为任何人再遇到这个并且在Objective-c编程确保你的appdelegate.h文件中有这行代码

@property (strong, nonatomic) UIWindow *window;
Run Code Online (Sandbox Code Playgroud)


小智 8

在 Appdelegate 文件中添加以下窗口声明

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window:UIWindow?
    ...
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序的 Info.plist 文件包含 UIMainStoryboardFile 键,则需要实现此属性。 此合成属性的默认值为 nil,这会导致应用创建一个通用 UIWindow 对象并将其分配给该属性。如果您想为您的应用程序提供自定义窗口,您必须实现此属性的 getter 方法并使用它来创建和返回您的自定义窗口。


Yod*_*ama 6

我遇到了同样的问题,只需var window: UIWindow?按照调试错误的说明添加即可。

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }
Run Code Online (Sandbox Code Playgroud)