[ios] 앱 델리게이트는 메인 스토리 보드 파일을 신속하게 사용하려는 경우 window 속성을 구현해야합니다.

방금 앱을 개발했지만 시뮬레이터에서 실행하면 디버거 콘솔에 다음과 같이 표시됩니다.

앱 델리게이트는 메인 스토리 보드 파일을 사용하려는 경우 window 속성을 구현해야합니다.

앱 위임 파일이 있습니다. 메시지는 무엇을 의미하며 내 앱이 작동하도록하려면 어떻게해야합니까?



답변

AppDelegate 클래스에 다음 속성 선언이 있는지 확인합니다.

var window: UIWindow?


답변

iOS 13.0 이전에서 프로젝트를 실행하면이 경우 문제가 발생합니다. iOS 13 이상으로 인해 앱이 이전 버전과 다르게 실행됩니다.

  • iOS 13 이상에서는 UISceneDelegate개체를 사용 하여 장면 기반 앱의 수명주기 이벤트에 응답합니다.

  • iOS 12 및 이전 버전에서는 UIApplicationDelegate개체를 사용하여 수명주기 이벤트에 응답합니다.

iOS 12 및 이전 버전에서 앱을 시작하면 클래스는 클래스 에서처럼 UIApplicationMain창 속성을 기대합니다 . 따라서 수업에 다음 줄을 추가하면 문제가 해결됩니다 .AppDelegateSceneDelegateAppDelegate

var window: UIWindow?

Objective-C 용

@property (strong, nonatomic) UIWindow *window;

여기에서 앱의 수명주기에 대해 자세히 알아볼 수 있습니다 .


답변

누군가이 문제를 다시 발견하고 Objective-C로 프로그래밍하는 경우 AppDelegate.h파일에 다음 코드 줄이 있는지 확인하십시오 .

@property (strong, nonatomic) UIWindow *window;


답변

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
    }

}


답변

나는 같은 문제가 있었고 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?

    //...
}