【iOS】didFinishLaunchingWithOptions 中调用 self.window 报错问题

使用 Xcode 11+ 创建iOS App 工程后,假如我们在 AppDelegate.m 的 didFinishLaunchingWithOptions 方法中,get 或者 set window 对象,可能会报出如下错误


截屏2020-12-07 下午3.10.24.png

这个是因为,在 iOS 13或者更高版本系统中,默认使用的是 Scene Delegate 来管理 App 的生命周期,所以不会默认生成 window 的 set 和 get 方法,调用就会报错。

如果想切回 AppDelegate 来管理 App 的生命周期,需要
1、删除 Info.plist 文件中的 UIApplicationSceneManifest key
2、在 @implementation AppDelegate 中 添加 @synthesize window = _window;
3、在 AppDelegate.m 中注释掉 UISceneSession 相关的方法(如 configurationForConnectingSceneSession didDiscardSceneSessions)

推荐阅读更多精彩内容

  • 在Xcode 11新创建的工程,运行设备选择iOS 13.0以下的设备,运行启动应用时会出现黑屏现象 Xcode ...
    香烟不灭阅读 1,357评论 2 5
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    琦均煞Sylar阅读 107评论 0 0
  • iOS面试题目100道 1.线程和进程的区别。 进程是系统进行资源分配和调度的一个独立单位,线程是进程的一个实体,...
    有度YouDo阅读 27,778评论 8 136
  • 最近由于换工作的原因,需要参加面试,然后就到处收集了一些当下的面试题供自己复习使用。下面就分享出来,希望能够帮到你...
    wuyukobe阅读 1,595评论 3 24
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 4,463评论 16 21