前言:
iOS13以后多出来一个SceneDelegate类,这个类的出现时为了要分担AppDelegate类的。
SceneDelegate类没有出现之前,AppDelegate类担任着 UI的生命周期 和 APP的生命周期,SceneDelegate类没有出现之后,把UI的生命周期都给了这个类维护。
问题:
那就出现了一个问题,那就是以前项目的创建UITabbarController的代码运行在iOS13的设备上出现了黑屏或者不显示或者崩溃的情况。
解决:
两种解决方式:
1、直接把关于SceneDelegate类删除掉,当它没有来过。
删除步骤:
1)把info.plist这个键都删除掉
2)把项目中这个类移除项目
3)把存在AppDelegate类中关于它的足迹都删除掉
注意:这个解决方式就引发了另一个问题,那就是删除会不会有什么后遗症。首先,要看你以后要不要用到,那这个类在什么时候,什么地点用到呢,那就是你的项目需要多个窗口的时候,比如IPod上的多个窗口,如果项目需要用的话,那么就是要保留的。
2,上面方式没办法实现,那么就只能在代码中适配了。
适配步骤:
1)在APPDelegate类中,对AppDelegate作分类,在前面直接@available(iOS 13.0, *)做标记,意思是只有运行到iOS13设备上才会调用这两个方法,如果不做分类也可以,要在这两个方法前面添加@available(iOS 13.0, *)。
2)直接在SceneDelegate类中前面添加@available(iOS 13.0, *)。意思与上面是一样。
这样其实在iOS13上就可以看到效果了,但是在iOS13以下的设备是不走这些方法的,所以要再适配一下iOS13以下的。
3)直接在APPDelegate类中,判断是否是iOS13以上的设备,如果是iOS13以上的设备就不用创建了,因为iOS13以上只能在SceneDelegate类去创建,上面说到UI的生命周期已经从APPDelegate类中夺过来了。那么如果是iOS13以下的设备就还是原来的老样子!
总结:
两种方式都是可以的,如果项目中不需要用到这个SceneDelegate类,那就直接删除掉。那如果需要用到的话那就老老实实的去适配吧!!