zoukankan      html  css  js  c++  java
  • Xcode11新变化:SceneDelegate

    前几天更新好Xcode11后,运行旧项目,相安无事,心里捏了一把汗,终于没有跟往年那样一更新就给你一大堆报错了。刚才突发奇想,使用Xcode11新建iOS项目时,如果你跟往常一样在Appdelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中创建根控制器,会崩溃报错:

     

    Appdelegate找不到设置window的方法。

    然后发现Xcode自动新增了一个SceneDelegate文件,查找了一下官方文档WWDC2019:Optimizing App Launch
    发现,iOS13中appdelegate的职责发现了改变:
    iOS13之前,Appdelegate的职责全权处理App生命周期和UI生命周期;
    iOS13之后,Appdelegate的职责是:
    1、处理 App 生命周期
    2、新的 Scene Session 生命周期
    那UI的生命周期呢?交给新增的Scene Delegate处理
    用图表示就是:
    iOS13之前:

     

    这种模式完全没问题,因为只有一个进程,只有一个与这个进程对应的用户界面

    但是iOS13之后,Appdelegate不在负责UI生命周期,所有UI生命周期交给SceneDelegate处理:

     

     

     

    因此初始化window方法需要改变:
    现在不再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];
    }


    作者:经天纬地

  • 相关阅读:
    Java中的四种内部类
    用输入/输出写一个程序,让用户输入一些姓名和电话号码
    分批读取大数据问题
    Linux产生序列数字
    两个有序链表的合并
    int和Integer的区别
    wait()和sleep()的区别
    Unix和Windows文件格式转化
    截取字符串的代码实现
    查看系统信息
  • 原文地址:https://www.cnblogs.com/jiuyi/p/15248616.html
Copyright © 2011-2022 走看看