Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器
Posted
技术标签:
【中文标题】Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器【英文标题】:Xcode & Swift - unable to instantiate another view controller from AppDelegate 【发布时间】:2020-06-17 12:22:11 【问题描述】:在您第一次使用此应用程序时,您会获得 3 个欢迎页面。在最后一个之后,我在 UserDefaults 中将 bool 保存为 true,以便在用户下次启动应用程序时跳过这些欢迎页面。
为此,我在 AppDelegate.swift 中执行以下操作:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
// Override point for customization after application launch.
if UserDefaultsVault.shared.getDidFinishIntro() == true
self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let mainVC = storyboard.instantiateViewController(withIdentifier: "mainPage") as UIViewController
self.window?.rootViewController = mainVC
self.window?.makeKeyAndVisible()
return true
当然,我将情节提要 ID 添加到情节提要中的视图控制器中,并且我还使用断点检查条件是否满足(并且它是真的)。
尽管如此,主控制器不会实例化。
我用这段代码制作了另一个应用程序,它总是有效!
我是不是搞错了什么?
【问题讨论】:
你的项目有SceneDelegate.swift
文件吗?
您好,感谢您的回复。是的。
***.com/a/58208876
【参考方案1】:
对于 ios 13+,您需要在 SceneDelegate 中提供 instantiateViewController(withIdentifier:)
,如下所示:
class SceneDelegate: UIResponder, UIWindowSceneDelegate
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
guard let windowScene = scene as? UIWindowScene else return
window = UIWindow(windowScene: windowScene)
window?.makeKeyAndVisible()
if UserDefaultsVault.shared.getDidFinishIntro()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
window?.rootViewController = storyboard.instantiateViewController(withIdentifier: "mainPage")
注意:您的代码适用于使用以下 iOS 13 的设备。
【讨论】:
以上是关于Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章
使用 swift 5 从远程读取 json 内容并在 Xcode 的主界面上打印