Xcode & Swift - 无法从 AppDelegate 实例化另一个视图控制器
Xcode & Swift - unable to instantiate another view controller from AppDelegate
第一次使用此应用程序时,您会看到 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 添加到我的视图控制器中,并且我还检查了断点是否满足条件(这是真的)。
尽管如此,主控制器不会实例化。
我用这段代码制作了另一个应用程序,它一直有效!
我是不是搞错了什么?
对于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 的设备。
第一次使用此应用程序时,您会看到 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 添加到我的视图控制器中,并且我还检查了断点是否满足条件(这是真的)。
尽管如此,主控制器不会实例化。
我用这段代码制作了另一个应用程序,它一直有效!
我是不是搞错了什么?
对于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 的设备。