Xcode11新變化:SceneDelegate

前幾天更新好Xcode11后,運行舊項目,相安無事,心里捏了一把汗,終于沒有跟往年那樣一更新就給你一大堆報錯了。剛才突發(fā)奇想,使用Xcode11新建iOS項目時,如果你跟往常一樣在Appdelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中創(chuàng)建根控制器,會崩潰報錯:

image.png

Appdelegate找不到設置window的方法。

然后發(fā)現(xiàn)Xcode自動新增了一個SceneDelegate文件,查找了一下官方文檔WWDC2019:Optimizing App Launch
發(fā)現(xiàn),iOS13中appdelegate的職責發(fā)現(xiàn)了改變:
iOS13之前,Appdelegate的職責全權處理App生命周期和UI生命周期;
iOS13之后,Appdelegate的職責是:
1、處理 App 生命周期
2、新的 Scene Session 生命周期
那UI的生命周期呢?交給新增的Scene Delegate處理
用圖表示就是:
iOS13之前:

image.png

這種模式完全沒問題,因為只有一個進程,只有一個與這個進程對應的用戶界面

但是iOS13之后,Appdelegate不在負責UI生命周期,所有UI生命周期交給SceneDelegate處理:

image.png

image.png

因此初始化window方法需要改變:
現(xiàn)在不再Appdelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions進行初始化,轉交給SceneDelegatewillConnectToSession:方法進行根控制器設置:

- (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];
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容