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


82

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

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

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


그 질문은 이해하기 매우 어렵습니다. 개선 할 수 있습니까?
clearlight 2015

무엇을 하려는지 잘 모르겠습니다. 그러나 당신이 제공 한 것에서 나는 물을 수 있습니다 : var window: UIWindow?당신의 AppDelegate 클래스에 속성이 있습니까?
lchamp 2015-04-04

이 엑스 코드는 콘솔에서 뱉어하는 오류 메시지입니다
brainray

appDelegate 클래스를 확인하십시오. UIResponder의 하위 클래스 여야합니다. 앱 대리인이 UIApplication의 하위 클래스 인 경우 다시 한번 확인해주세요.
Aashish1aug

답변:


159

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

var window: UIWindow?

9
속성을 선언하는 것만으로도 문제가 해결되었습니다! 개발자들은 정말 미쳤습니다.
Sazzad Hissain Khan

109

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;

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


1
이 줄을 AppDelegate 클래스에 썼고 Main Interface (Target-> General-> Main Interface = Main.storyboard)를 변경했습니다. 여전히 동일한 .Xcode 버전이 11.0입니다. 수정 방법
Madhu_Nani

호감 남녀 기록을 공유해 주 시겠어요?
iMuzahid

입력 파일 'CustomTabBar.swift'가 빌드 명령 중에 수정되었습니다. CompileSwiftSources가 0이 아닌 종료 코드로 실패했습니다.
Madhu_Nani

그러나 로그에 프로젝트를 빌드 할 때 코드를 수정했다고 표시됩니다. 빌드 폴더를 정리합니다 (Command + Shif + K). 귀하의 문제가 다시 해결되기를 바랍니다.
iMuzahid

이 엑스 코드 (11) 수 ..May 끝났어 그래 장치의 .Thanks의 일부 느린
Madhu_Nani

29

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

@property (strong, nonatomic) UIWindow *window;

22

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
    }

}

2
swiftUI를 사용하지 않는 경우 이것은 올바른 대답이 될 것입니다. @Sarvan 감사합니다
Abhijith Brumal

6

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

2

앱 델리게이트 클래스를 확인할 수 있습니다.

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.
    }
}

2

Swift 5 및 Xcode 11

속성 이 SceneDelegate포함되어 있는지 확인UIWindow

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    //...
}

충분히 공평합니다-내 것을 제외하고는 여전히 오류가 있습니다. 적어도 적용 가능하기 때문에 나는 찬성 할 것입니다.
StephenBoesch

1

Appdelegate 파일에 다음 창 선언을 추가하십시오.

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

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


0

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


0

Info.plist 응용 프로그램 장면 매니페스트의 설정> 다중 창 활성화> false. 이것은 나를 위해 문제를 해결했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.