當(dāng)我們更新了xcode到11的版本的時(shí)候,我們?cè)傩陆?xiàng)目就會(huì)發(fā)現(xiàn),出現(xiàn)的文件與之前的不同,會(huì)多出兩個(gè)文件SceneDelegate.h和SceneDelegate.m.
SceneDelegate 是ipados用來做多窗口支持的? 這時(shí)候如果你還像之前的一樣,在appdelegate里寫self.window的方法的話,運(yùn)行程序,直接崩潰了,因?yàn)樾掳姹镜膞code的appdelegate里面已經(jīng)沒有了window這個(gè)屬性
?在iOS13之前,appdelegate會(huì)處理app生命周期和UI生命周期,但是iOS13之后,appdelegate就不再處理UI生命周期了,只負(fù)責(zé)處理生命周期和新的scene? session生命周期,而UI 的生命周期就有scene delegate處理了,所以我們寫的self.window時(shí)就要放到scenedelegate里
?適配iOS13包含和以上的設(shè)備要在sceneDelegate內(nèi)寫:
?UIWindowScene * windowScene = (UIWindowScene *)scene;
?self.window = [[UIWindow alloc]initWithWindowScene:windowScene];
?self.window.frame = windowScene.coordinateSpace.bounds;
?ViewController * control = [[ViewController alloc]init];
?self.window.rootViewController = control;
?[self.window makeKeyAndVisible];
?同時(shí)適配iOS13以下設(shè)備以及iOS13以上的設(shè)備,需要把相關(guān)的sceneDelegate都刪掉:
1.刪除info文件里關(guān)于scenedelegate的配置信息:刪除Application Scene Manifest
?2.appdelegate.h文件增加window屬性
?3.在APPdelegate.m里刪除新加的scene方法 UISceneSession lifecycle 內(nèi)面的方法
?4.刪除scenedelegate的2個(gè)文件