アプリを開発したばかりですが、シミュレーターで実行すると、デバッガーコンソールに次のように表示されます。
メインストーリーボードファイルを使用する場合、アプリデリゲートはwindowプロパティを実装する必要があります。
アプリのデリゲートファイルがあります。メッセージの意味と、アプリを機能させるにはどうすればよいですか?
アプリを開発したばかりですが、シミュレーターで実行すると、デバッガーコンソールに次のように表示されます。
メインストーリーボードファイルを使用する場合、アプリデリゲートはwindowプロパティを実装する必要があります。
アプリのデリゲートファイルがあります。メッセージの意味と、アプリを機能させるにはどうすればよいですか?
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;
詳細については、アプリのライフサイクルをご覧ください。
XCode 11で新しいプロジェクトを作成したときに、このエラーが発生しました。を使用していませんSwiftUI
。これが手順です、私はこれを修正することを検討しました。
Application Scene Manifest
からエントリを削除しましたInfo.plist
SceneDelegate.swift
ファイルAppDelegate.swift
クラス内のすべてのシーン関連メソッドを削除しましたvar window: UIWindow?
プロパティを追加AppDelegate.swift
これらの手順を実行すると、iOS13より前のバージョンでアプリを実行できるようになります。
[編集]
最後に、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オブジェクトを作成し、それをプロパティに割り当てます。アプリにカスタムウィンドウを提供する場合は、このプロパティのgetterメソッドを実装し、それを使用してカスタムウィンドウを作成して返す必要があります。
アプリのデリゲートクラスを確認できます。
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?
//...
}
Info.plistアプリケーションシーンマニフェストでの設定>複数のウィンドウを有効にする> false。これは私にとって問題を解決しました。