Xcode11 新建project 新变化:SceneDelegate
本篇文章基于 Xcode 11 和 iOS 13.
这个版本开始新建的工程初始状况发生了一些改变, 新加了SceneDelegate.h /.m 文件,对应info.plist中加了 Application Scene Manifest 对应配置。即加了 SceneDelegate 场景的概念, 那么先简单了解一下这个新东西。
iOS13中 Appdelegate的职责发现了改变:
iOS13之前,Appdelegate的职责全权处理App生命周期和UI生命周期;
iOS13之后,Appdelegate的职责是:
1、处理 App 生命周期
2、新的 Scene Session 生命周期
那UI的生命周期呢?交给新增的Scene Delegate处理.
iOS13之后,Appdelegate不再负责UI生命周期,所有UI生命周期交给SceneDelegate处理.
因此初始化window方法需要改变:
如果暂时不接触SceneDelegate。
直接删除 SceneDelegate.h /.m 文件,以及对应info.plist中的 Application Scene Manifest 配置。
在AppDelegate.h 中加上 @property (strong, nonatomic) UIWindow * window; 属性。就可以保持和之前版本一样的初始化方法。
- (BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
[self.window setBackgroundColor:[UIColor whiteColor]];
UIViewController * vc = [[UIViewController alloc]init];
UINavigationController * nav = [[UINavigationController alloc] initWithRootViewController:vc];
[self.window setRootViewController:nav];
[self.window makeKeyAndVisible];
return YES;
}
如果顺应SceneDelegate新概念而开发。
那么不再在Appdelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions进行初始化,转交给SceneDelegate的willConnectToSession:方法进行根控制器设置.
- (void)scene:(UIScene*)scenewillConnectToSession:(UISceneSession*)sessionoptions:(UISceneConnectionOptions*)connectionOptions {
UIWindowScene*windowScene = (UIWindowScene*)scene;
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.windowsetWindowScene:windowScene];
[self.window setBackgroundColor:[UIColor whiteColor]];
UIViewController *con = [[UIViewController alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:con];
[self.window setRootViewController:nav];
[self.window makeKeyAndVisible];
}
之后我的常规操作是
1.删除我不用的 Main.storyboard —- delete —— Move to Trash。
2.点击工程名,就是最顶级目录
右侧出现general选项卡
将Deployment info组内的Main Interface设为空
3.打开info.plist,删除 Main storyboard file base name选项。