Acabo de desarrollar una aplicación, pero cuando se ejecuta en el simulador, la consola del depurador dice:
El delegado de la aplicación debe implementar la propiedad de la ventana si desea utilizar un archivo de guión gráfico principal.
Tengo un archivo delegado de la aplicación. ¿Qué significa el mensaje y cómo puedo hacer que funcione mi aplicación?
var window: UIWindow?
propiedad en su clase AppDelegate?Respuestas:
Asegúrese de tener la siguiente declaración de propiedad en su clase AppDelegate:
var window: UIWindow?
fuente
Si ejecuta su proyecto en una versión anterior a iOS 13.0, en ese caso enfrentará el problema. Debido a iOS 13 y posterior, la aplicación se inicia de manera diferente a las versiones anteriores.
En iOS 13 y posterior, use
UISceneDelegate
objetos para responder a eventos del ciclo de vida en una aplicación basada en escenasEn iOS 12 y versiones anteriores, use el
UIApplicationDelegate
objeto para responder a eventos del ciclo de vida.Cuando inicia la aplicación en iOS 12 y antes, la
UIApplicationMain
clase espera una propiedad de ventana en suAppDelegate
clase como la queSceneDelegate
tiene. Entonces, su problema se resolverá si agrega la siguiente línea en suAppDelegate
clase.var window: UIWindow?
Para Objective-C
@property (strong, nonatomic) UIWindow *window;
Puede encontrar más aquí Ciclo de vida de la aplicación .
fuente
En caso de que alguien se vuelva a encontrar con esto y esté programando en Objective-C, asegúrese de tener esta línea de código en su
AppDelegate.h
archivo:@property (strong, nonatomic) UIWindow *window;
fuente
Recibí este error, cuando creé un nuevo proyecto en XCode 11. No lo he usado
SwiftUI
. Estos son los pasos que he considerado para solucionar este problema.Application Scene Manifest
Entrada eliminada deInfo.plist
SceneDelegate.swift
Archivo eliminadoAppDelegate.swift
clase.var window: UIWindow?
propiedad agregada enAppDelegate.swift
claseDespués de estos pasos, puedo ejecutar la aplicación en una versión anterior a iOS 13.
[EDITAR]
Finalmente, su
AppDelegate.swift
archivo debería tener un aspecto similar al siguiente.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 } }
fuente
Tuve el mismo problema, solo agregue
var window: UIWindow?
como dice el error de depuración.@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 }
fuente
Puede verificar la clase de delegado de su aplicación:
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. } }
fuente
Swift 5 y Xcode 11
Asegúrese de que
SceneDelegate
contenga laUIWindow
propiedadclass SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? //... }
fuente
Agregue la siguiente declaración de ventana en el archivo Appdelegate
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window:UIWindow? ...
La implementación de esta propiedad es necesaria si el archivo Info.plist de su aplicación contiene la clave UIMainStoryboardFile. El valor predeterminado de esta propiedad sintetizada es nil, lo que hace que la aplicación cree un objeto UIWindow genérico y lo asigne a la propiedad. Si desea proporcionar una ventana personalizada para su aplicación, debe implementar el método getter de esta propiedad y usarlo para crear y devolver su ventana personalizada.
fuente
Respondió hace mucho tiempo, pero para ayudar a comprender las preguntas anteriores sobre por qué simplemente agregar la propiedad de la ventana resuelve el problema, tenga en cuenta que el delegado de la aplicación se ajusta al
UIApplicationDelegate
protocolo que define una propiedad,@property (nullable, nonatomic, strong) UIWindow *window;
que las clases deben proporcionar para especificar elwindow to use when presenting a storyboard
. No proporcionar eso está causando las advertencias de registro de Xcode.fuente
Configuración en Info.plist Application Scene Manifest> Enable Mutliple Windows> false. Esto resolvió mi problema.
fuente