El delegado de la aplicación debe implementar la propiedad de la ventana si quiere usar un archivo de guión gráfico principal rápido

82

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?

Ethan Marcus
fuente
Esa pregunta es muy difícil de entender. ¿Puedes intentar mejorarlo?
luz clara
No estoy seguro de lo que intentas hacer. Pero por lo que proporcionó, puedo preguntar: ¿tenía la var window: UIWindow?propiedad en su clase AppDelegate?
lchamp
Este es el mensaje de error que escupe Xcode en la consola
brainray
Verifique su clase appDelegate, debería ser la subclase de UIResponder. Si su delegado de aplicación es una subclase de UIApplication. Compruébalo una vez más.
Aashish1aug

Respuestas:

159

Asegúrese de tener la siguiente declaración de propiedad en su clase AppDelegate:

var window: UIWindow?
muneeb
fuente
9
¿Cómo es que simplemente declarar una propiedad resolvió el problema? Los desarrolladores están locos de verdad.
Sazzad Hissain Khan
109

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 UISceneDelegateobjetos para responder a eventos del ciclo de vida en una aplicación basada en escenas

  • En iOS 12 y versiones anteriores, use el UIApplicationDelegateobjeto para responder a eventos del ciclo de vida.

Cuando inicia la aplicación en iOS 12 y antes, la UIApplicationMainclase espera una propiedad de ventana en su AppDelegateclase como la que SceneDelegatetiene. Entonces, su problema se resolverá si agrega la siguiente línea en su AppDelegateclase.

var window: UIWindow?

Para Objective-C

@property (strong, nonatomic) UIWindow *window;

Puede encontrar más aquí Ciclo de vida de la aplicación .

iMuzahid
fuente
1
Escribí esta línea en la clase AppDelegate y cambié la interfaz principal (Destino -> General -> Interfaz principal = Main.storyboard. Aún así, obtengo la misma versión de .Xcode es 11.0. Cómo solucionarlo
Madhu_Nani
¿Podrías compartir tu registro de crush?
iMuzahid
El archivo de entrada 'CustomTabBar.swift' se modificó durante la compilación El comando CompileSwiftSources falló con un código de salida distinto de cero
Madhu_Nani
Pero su registro dice que modificó su código al construir su proyecto. Limpia tu carpeta de compilación (Comando + Shif + K). Espero que su problema sea resuelto.
iMuzahid
Sí se hace ..May ser Xcode 11 es un poco lenta en .¡AGRADECE el dispositivo
Madhu_Nani
29

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.harchivo:

@property (strong, nonatomic) UIWindow *window;
TomTom
fuente
22

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.

  1. Application Scene ManifestEntrada eliminada deInfo.plist
  2. SceneDelegate.swiftArchivo eliminado
  3. Se eliminaron todos los métodos relacionados con la escena en AppDelegate.swiftclase.
  4. var window: UIWindow?propiedad agregada en AppDelegate.swiftclase

Después de estos pasos, puedo ejecutar la aplicación en una versión anterior a iOS 13.

[EDITAR]
Finalmente, su AppDelegate.swiftarchivo 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
    }

}
Sravan
fuente
2
Si no está usando swiftUI, esta debería ser la respuesta correcta que funcionó para mí. Gracias @Sarvan
Abhijith Brumal
6

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
    }
Yodagama
fuente
2

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.
    }
}
Deepak Kumar
fuente
2

Swift 5 y Xcode 11

Asegúrese de que SceneDelegatecontenga la UIWindowpropiedad

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    //...
}
yoAlex5
fuente
Bastante justo, excepto que el mío lo hace y todavía tiene el error. Votaré a favor ya que al menos es aplicable.
StephenBoesch
1

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.

Sudán Suwal
fuente
0

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 UIApplicationDelegateprotocolo que define una propiedad, @property (nullable, nonatomic, strong) UIWindow *window;que las clases deben proporcionar para especificar el window to use when presenting a storyboard. No proporcionar eso está causando las advertencias de registro de Xcode.

terence
fuente
0

Configuración en Info.plist Application Scene Manifest> Enable Mutliple Windows> false. Esto resolvió mi problema.

Muhammed Ali Aktaş
fuente