iOS13之后手动设置程序入口点

一、AppDelegate和SceneDelegate

简略地说:iOS13之前是AppDelegate管理app和UI的生命周期,在iOS13之后AppDelegate管理app的生命周期和SceneDelegate的生命周期,将UI的生命周期交给SceneDelegate管理,这也就是为什么在SceneDelegate.h中有个window。所以,在Xcode11之后创建项目,在设置setRootViewController是不能在AppDelegate里的。

ios12

 1 application:(UIApplication *)application didFinishLaunchingWithOptions
 2 // 初始化
 3 
 4 application:(UIApplication *)applicationDidBecomeActive
 5 // 已经被激活
 6 
 7 application:(UIApplication *)applicationWillResignActive
 8 // 即将被挂起
 9 
10 application:(UIApplication *)applicationDidEnterBackground
11 // 已经进入后台
12 
13 application:(UIApplication *)applicationWillEnterForeground
14 // 即将回到前台
15 
16 application:(UIApplication *)applicationWillTerminate
17 // 即将被杀死

iOS13

 1 scene:(UIScene *)scene willConnectToSession
 2 // 初始化
 3 
 4 sceneDidBecomeActive:(UIScene *)scene
 5 // 已经被激活
 6 
 7 sceneWillResignActive:(UIScene *)scene
 8 // 即将被挂起
 9 
10 sceneDidEnterBackground:(UIScene *)scene
11 // 已经进入后台
12 
13 sceneWillEnterForeground:(UIScene *)scene
14 // 即将回到前台
15 
16 sceneDidDisconnect:(UIScene *)scene
17 // 即将被杀死

二、没有分屏的情况继续用AppDelegate

1、直接删除SceneDelegate这个类并在info.plist文件中删除Application Scene Manifest选项。如下图:

2、在AppDelegate.m中注释掉下面的代码:

3、删除main.storyboard和程序初始信息

使main.storyboard为空

修改程序信息

4、在AppDelegate里设置根视图控制器

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 2     
 3     UIViewController *vc;
 4     if ([JZFactory isFirstEntry]) {
 5         // 第一次进入 加载引导页
 6         vc = [JZGuideCollectionViewController new];
 7     } else {
 8         // 其他情况加载广告页
 9         vc = [JZAdViewController new];
10     }
11     // 初始化UIWindow
12     self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
13     // 设置根视图控制器
14     _window.rootViewController = vc;
15     // 设置该window可见
16     [_window makeKeyAndVisible];
17     
18     return YES;
19 }

注意:要在AppDelegate.h中声明UIWindow

1 @property (strong, nonatomic) UIWindow * window;

三、需要使用分屏,就要使用SceneDelegate

1、如果因项目需要分屏,并且需要适配iOS13以下,就需要在AppDelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中去加判断。代码如下:(别忘了在AppDelegate添加window属性)

1 if (@available(iOS 13,*)) {
2         return YES;
3     } else {
4         self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
5         UINavigationController *rootNavgationController = [[UINavigationController alloc] initWithRootViewController:[ViewController new]];
6         self.window.rootViewController = rootNavgationController;
7         [self.window makeKeyAndVisible];
8         return YES;
9     }

2、同时在SceneDelegate中写window设置代码:

1 - (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
2     
3     self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
4     self.window.windowScene = (UIWindowScene*)scene;
5     UINavigationController *rootNavgationController = [[UINavigationController alloc] initWithRootViewController:[ViewController new]];
6     self.window.rootViewController = rootNavgationController;
7     [self.window makeKeyAndVisible];
8 }

注意:Info.plist和main.storyboard的设置如二。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
iOS 13 ipcc 是指苹果操作系统iOS 13中的IPCC(iPhone Configuration Utility Carrier Bundle)配置文件。IPCC配置文件是苹果设备上的一种配置文件,用于设置和优化移动网络运营商的服务和功能。 使用iOS 13 ipcc配置文件时,用户可以自定义和调整移动网络设置,以满足个人需求。例如,可以更改数据通信方式、网络频率和服务类别。此外,还可以设置运营商相关功能,如语音信箱、彩信和短信服务等。 iOS 13中的ipcc配置文件具有许多优。首先,它的使用非常方便,用户只需通过iTunes或直接下载文件,然后将其安装到设备上即可。其次,ipcc文件具有可靠性和稳定性,可以确保设备与运营商网络的兼容性和正常运行。此外,用户还可以根据自己的需求进行个性化设置,以提供更好的网络体验。 然而,使用iOS 13 ipcc配置文件也存在一些限制和注意事项。首先,用户需要确保所使用的ipcc文件与设备和运营商兼容,否则可能会导致设备性能下降或出现问题。其次,ipcc文件的设置可能受到运营商政策和限制的影响,用户需要了解相应的运营商政策和服务条款。 综上所述,iOS 13 ipcc配置文件是苹果设备中用于调整和优化移动网络配置的文件。它的使用方便、稳定可靠,并且可以根据个人需求进行个性化设置。然而,在使用过程中需要注意兼容性和运营商政策等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值