我刚刚开发了一个应用程序,但是在模拟器中运行时,调试器控制台会显示:
如果要使用主故事板文件,则该应用程序委托必须实现window属性。
我有一个应用程序委托文件。该消息是什么意思,如何使我的应用正常工作?
我刚刚开发了一个应用程序,但是在模拟器中运行时,调试器控制台会显示:
如果要使用主故事板文件,则该应用程序委托必须实现window属性。
我有一个应用程序委托文件。该消息是什么意思,如何使我的应用正常工作?
var window: UIWindow?
在AppDelegate类中拥有该属性?
Answers:
如果您在iOS 13.0之前的版本上运行项目,则将遇到问题。由于iOS 13及更高版本,应用程序的启动方式与早期版本不同。
在iOS 13及更高版本中,使用UISceneDelegate
对象响应基于场景的应用程序中的生命周期事件
在iOS 12及更低版本中,使用UIApplicationDelegate
对象响应生命周期事件。
当您在iOS 12及更早版本中启动该应用程序时,课堂将像UIApplicationMain
在AppDelegate
课堂上一样期待window属性SceneDelegate
。因此,如果您在AppDelegate
类中添加以下行,则将解决您的问题。
var window: UIWindow?
对于Objective-C
@property (strong, nonatomic) UIWindow *window;
您可以在此处找到更多应用程序的生命周期。
在XCode 11中创建新项目时,我收到此错误。我没有使用过SwiftUI
。这是我考虑过解决的步骤。
Application Scene Manifest
从中删除的条目Info.plist
SceneDelegate.swift
文件AppDelegate.swift
班级中所有与场景相关的方法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
}
}
我有同样的问题,只是添加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
}
您可以检查您的应用程序委托类:
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
}
// MARK: UISceneSession Lifecycle
@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
}
Swift 5和Xcode 11
确保SceneDelegate
包含UIWindow
属性
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
//...
}
在Info.plist应用程序场景清单>启用多重窗口>中设置。这为我解决了问题。