为什么一个视图控制器创建了两次?
Why is a view controller created twice?
我的 AppDelegate::didFinishLaunchingWithOptions
中有以下代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
createContainer { container in
let storyboard = self.window?.rootViewController?.storyboard
guard let vc = storyboard?.instantiateViewController(withIdentifier: "Main") as? MainViewController else {
fatalError("Cannot instantiate root view controller")
}
vc.context = container.viewContext
self.window?.rootViewController = vc
}
return true
}
我的MainViewController是在启动时创建的,堆栈显示如下:
0 MainViewController.viewDidLoad()
UIApplicationMain
main
start
然后在下面一行里面创建:
self.window?.rootViewController = vc
这是我第一次看到 vc 创建了两次。
这正常吗?
我有什么办法可以防止这种情况发生吗?
UIApplicationMain
在您收到 application:didFinishLaunchingWithOptions:
消息之前自动实例化主故事板的初始视图控制器。您不应该在 application:didFinishLaunchingWithOptions:
.
中“手动”实例化它
我的 AppDelegate::didFinishLaunchingWithOptions
中有以下代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
createContainer { container in
let storyboard = self.window?.rootViewController?.storyboard
guard let vc = storyboard?.instantiateViewController(withIdentifier: "Main") as? MainViewController else {
fatalError("Cannot instantiate root view controller")
}
vc.context = container.viewContext
self.window?.rootViewController = vc
}
return true
}
我的MainViewController是在启动时创建的,堆栈显示如下:
0 MainViewController.viewDidLoad()
UIApplicationMain
main
start
然后在下面一行里面创建:
self.window?.rootViewController = vc
这是我第一次看到 vc 创建了两次。
这正常吗?
我有什么办法可以防止这种情况发生吗?
UIApplicationMain
在您收到 application:didFinishLaunchingWithOptions:
消息之前自动实例化主故事板的初始视图控制器。您不应该在 application:didFinishLaunchingWithOptions:
.