Я только что разработал приложение, но при запуске в симуляторе консоль отладчика говорит:
Делегат приложения должен реализовать свойство окна, если он хочет использовать основной файл раскадровки.
У меня есть файл делегата приложения. Что означает сообщение и как заставить мое приложение работать?
var window: UIWindow?
свойство в вашем классе AppDelegate?Ответы:
Убедитесь, что в вашем классе AppDelegate есть следующее объявление свойства:
var window: UIWindow?
источник
Если вы запустите свой проект на более ранней версии, чем iOS 13.0, в этом случае вы столкнетесь с проблемой. Из-за iOS 13 и более поздних версий приложение запускается иначе, чем в более ранних версиях.
В iOS 13 и более поздних версиях используйте
UISceneDelegate
объекты для ответа на события жизненного цикла в приложении на основе сцены.В iOS 12 и более ранних версиях используйте
UIApplicationDelegate
объект для ответа на события жизненного цикла.Когда вы запускаете приложение в iOS 12 и ранее,
UIApplicationMain
класс ожидает, что свойство окна в вашемAppDelegate
классе, как иSceneDelegate
есть. Итак, ваша проблема будет решена, если вы добавите в свойAppDelegate
класс следующую строку .var window: UIWindow?
Для Objective-C
@property (strong, nonatomic) UIWindow *window;
Вы можете найти больше здесь жизненного цикла приложения .
источник
На всякий случай, если кто-то снова столкнется с этим и будет программировать на Objective-C, убедитесь, что у вас есть эта строка кода в вашем
AppDelegate.h
файле:@property (strong, nonatomic) UIWindow *window;
источник
Я получил эту ошибку, когда создавал новый проект в XCode 11. Я не использовал
SwiftUI
. Вот шаги, которые я решил исправить.Application Scene Manifest
запись изInfo.plist
SceneDelegate.swift
файлAppDelegate.swift
классе удалены все методы, связанные со сценой.var window: UIWindow?
недвижимость вAppDelegate.swift
классеПосле этих шагов я могу запустить приложение в версии до iOS 13.
[EDIT]
Наконец, ваш
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 }
источник
Добавьте следующее объявление окна в файл Appdelegate
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window:UIWindow? ...
Реализация этого свойства требуется, если файл Info.plist вашего приложения содержит ключ UIMainStoryboardFile. Значение по умолчанию этого синтезированного свойства - nil, что заставляет приложение создавать общий объект UIWindow и назначать его свойству. Если вы хотите предоставить настраиваемое окно для своего приложения, вы должны реализовать метод получения этого свойства и использовать его для создания и возврата настраиваемого окна.
источник
Вы можете проверить свой класс делегата приложения:
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? //... }
источник
Давно ответил, но чтобы помочь понять приведенные выше вопросы о том, почему простое добавление свойства окна решает проблему, обратите внимание, что делегат приложения соответствует
UIApplicationDelegate
протоколу, который определяет свойство,@property (nullable, nonatomic, strong) UIWindow *window;
которое классы должны предоставить, чтобы указатьwindow to use when presenting a storyboard
. Неспособность предоставить это вызывает предупреждения журнала Xcode.источник
Настройка в Info.plist Application Scene Manifest> Enable Mutliple Windows> false. Это решило проблему для меня.
источник