Xcode11新變化:SceneDelegate
阿新 • • 發佈:2019-12-25
前幾天更新好Xcode11後,執行舊專案,相安無事,心裡捏了一把汗,終於沒有跟往年那樣一更新就給你一大堆報錯了。剛才突發奇想,使用Xcode11新建iOS專案時,如果你跟往常一樣在Appdelegate
的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中建立根控制器,會崩潰報錯:
Appdelegate
找不到設定window的方法。
然後發現Xcode自動新增了一個SceneDelegate
檔案,查找了一下官方文件WWDC2019:Optimizing App Launch
但是iOS13之後,Appdelegate
不在負責UI生命週期,所有UI生命週期交給SceneDelegate
處理:
因此初始化window方法需要改變:
現在不再Appdelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
進行初始化,轉交給SceneDelegate
的willConnectToSession:
方法進行根控制器設定:
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
UIWindowScene *windowScene = (UIWindowScene *)scene;
self.window = [[UIWindow alloc] initWithWindowScene:windowScene];
self.window.frame = windowScene.coordinateSpace.bounds;
self.window.rootViewController = [UITabBarController new];
[self.window makeKeyAndVisible];
}
複製程式碼