英文:
Couldn't find 'window' in scope, Scene delegate
问题
这个问题通常出现在 AppDelegate.swift
文件中,原因是由于新添加的 Scene 委托(Scene delegate),但是由于某种原因,我在 Scene 委托中遇到了 couldn't find window in scope
错误。
以下是你的代码:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// 使用这个方法来可选地配置并将 UIWindow `window` 附加到提供的 UIWindowScene `scene`。
// 如果使用故事板(Storyboard),`window` 属性将自动初始化并附加到场景。
// 这个委托不意味着连接的场景或会话是新的(请查看 `application:configurationForConnectingSceneSession` 替代)。
guard let _ = (scene as? UIWindowScene) else { return }
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if (UserDefaults.standard.bool(forKey: "ISRemember")) {
print(UserDefaults.standard.bool(forKey: "ISRemember"))
let mainTabBarController = storyboard.instantiateViewController(identifier: "tabbar")
window?.rootViewController = mainTabBarController
}
else {
// 处理其他情况
}
}
我尝试清理了 Xcode 的构建文件夹,但没有帮助。我还尝试重新启动了 Xcode,甚至我的 Mac,但仍然遇到相同的错误。有什么想法吗?
英文:
So this problem is mostly common in the AppDelegate.swift
because of the newly added Scene delegate, but for some reason I get couldn't find window in scope
in the scene delegate?
here is my code:
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
guard let _ = (scene as? UIWindowScene) else { return }
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if (UserDefaults.standard.bool(forKey: "ISRemember")) {
print(UserDefaults.standard.bool(forKey: "ISRemember"))
let mainTabBarController = storyboard.instantiateViewController(identifier: "tabbar")
window?.rootViewController = mainTabBarController
}
else {
}
}
I tried cleaning xcode's build folder but it didn't help. I also tried restarting xcode and even my mac but I still get the same error. Any Ideas?
答案1
得分: 0
你的SceneDelegate
类符合UIWindowSceneDelegate
协议。该协议声明了一个名为window
、类型为UIWindow
的属性。
由于你的SceneDelegate
类试图符合该协议,你必须提供这个window
属性。
如果你基于Swift和Storyboard创建一个新的iOS应用项目,SceneDelegate
类将已经包含window
的必要声明。如果你的SceneDelegate
类因某种原因没有这个属性,可以将以下代码添加到该类中:
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow? // 添加这行
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
英文:
Your scene delegate class conforms to the protocol UIWindowSceneDelegate
. The protocol declares that there is a property named window
of type UIWindow
.
Since your SceneDelegate
class is trying to conform to that protocol, you must provide that window
property.
If you create a new iOS app project based on Swift and Storyboard, the SceneDelegate
class will already come with the necessary declaration of window
. If your SceneDelegate
class doesn't have this for some reason, add this property to the class:
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow? // Add this line
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论