programing

메인 스토리보드 파일을 신속하게 사용하려면 앱 대리자가 창 속성을 구현해야 합니다.

megabox 2023. 5. 29. 10:28
반응형

메인 스토리보드 파일을 신속하게 사용하려면 앱 대리자가 창 속성을 구현해야 합니다.

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

메인 스토리보드 파일을 사용하려면 앱 대리자가 창 속성을 구현해야 합니다.

앱 위임 파일이 있습니다.메시지의 의미는 무엇이며 어떻게 하면 앱을 작동시킬 수 있습니까?

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

var window: UIWindow?

iOS 13.0 이전 버전에서 프로젝트를 실행하면 문제가 발생합니다.iOS 13 이후 버전 때문에 앱이 이전 버전과 다르게 실행됩니다.

  • 13을 사용합니다.UISceneDelegate씬(scene) 기반 앱에서 수명 주기 이벤트에 응답하는 개체

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

버전에서 12가 실행됩니다.UIApplicationMain는 당신의 속성을 합니다.AppDelegate 같부은의와 같은 계급SceneDelegate그래서 당신의 문제는 당신이 당신의 문제에 다음의 행을 추가하면 해결될 것입니다.AppDelegate학생들

var window: UIWindow?

목표-C의 경우

@property (strong, nonatomic) UIWindow *window;

앱의 라이프 사이클에서 더 많은 정보를 찾을 수 있습니다.

만약 누군가가 이것을 다시 발견하고 오브젝티브-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
    }

}

Appdelegate 파일에 다음 창 선언 추가

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window:UIWindow?
    ...

앱의 Info.plist 파일에 UIMainStoryboardFile 키가 포함된 경우 이 속성을 구현해야 합니다.이 합성된 속성의 기본값은 0입니다. 이로 인해 앱에서 일반 UIWindow 개체를 생성하여 속성에 할당합니다.앱에 사용자 지정 창을 제공하려면 이 속성의 getter 메서드를 구현하고 이 메서드를 사용하여 사용자 지정 창을 만들고 반환해야 합니다.

저도 같은 문제가 있었어요, 그냥 추가하세요.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.
    }
}

오류: 메인 스토리보드 파일을 사용하려면 앱 대리자가 창 속성을 구현해야 합니다.

스위프트 5 & X 코드 11

반드시SceneDelegate포함하다UIWindow소유물

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    var window: UIWindow?
    //...
}

Info.plist Application Scene Manifest > Enable Multiple Windows > false에서 설정합니다.이것으로 저는 문제를 해결했습니다.

오래 전에 대답했지만, 윈도우 속성을 추가하는 것만으로 문제가 해결되는 이유에 대한 위의 질문을 이해하는 데 도움이 되기 위해 앱 대리자가 다음을 준수한다는 점에 유의하십시오.UIApplicationDelegate속성을 정의하는 프로토콜,@property (nullable, nonatomic, strong) UIWindow *window;클래스가 지정하기 위해 제공해야 하는 것window to use when presenting a storyboard이를 제공하지 않으면 Xcode 로그 경고가 발생합니다.

Swift의 경우:

var window: UIWindow?

목표-C:

@property (strong, nonatomic) UIWindow *window;

게다가, 당신은 아마도.Application Scene Manifest에 입력Info.plist파일 - 장면을 사용하지 않고 창과 보기 컨트롤러만 사용하는 경우(예: 이전 UI 설정에서 무언가를 테스트하려는 경우) 해당 항목을 제거하여 보기를 볼 수 있어야 합니다.

언급URL : https://stackoverflow.com/questions/29441682/the-app-delegate-must-implement-the-window-property-if-it-wants-to-use-a-main-st

반응형