由于一直以来都是在已创建好的项目工程里做开发,所以对工程创建时遇到的一些问题已经记不太清了。
参考以前的老教材中是直接在Appdelegate的.m文件中初始化了self.window,但实际使用时,会产生如下错误:
-[AppDelegate window]: unrecognized selector sent to instance
原因:
根据描述得知是appdelegate中找不到window这个方法,很奇怪,那调用到的self.window是什么呢?为何没产生编译错误
使用新版Xcode(用的是15.2)创建的项目,AppDelegate里没有window这个属性,所以通过UIApplication.sharedApplication.delegate.window来取window这个属性是取不到的,所以闪退。
从iOS13开始,原本AppDelegate(UIApplicationDelegate)控制生命周期的行为移交给了SceneDelegate(UIWindowSceneDelegate)。
AppDelegate.h中没有了window,window移到了SceneDelegate.h
具体见:iOS13生命周期的改动
解决办法:不使用场景Scene
想起来现有的项目工程里都在Appdelegate的.h文件里加了window属性,果然,在.h中加了window属性之后一切都迎刃而解了
1、删除UIApplicationSceneManife(info.plist里的Application Scene Manifest)
2、在Appdelegate.m中注释掉scene有关的代码
3、在AppDelegate.h中添加window属性
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow * window;
@end
标签:selector,Appdelegate,instance,window,SceneDelegate,AppDelegate,sent,属性
From: https://blog.csdn.net/qq_39773151/article/details/141035806