对于Xcode11中对于APPDelegate所做的一些改动,导致的unrecongnized selector sent to instance错误

Xcode11做的这些改动,对于小白来说太难了 ,记录一下这次艰辛的过程
因为所学习的视频里面都是老版本的Xcode,而我当时脑子抽风下载的Xcode版本较高,所以在跟代码时出现了错误,作为小白简直一脸懵逼,完全无法理解,明明代码一样的。所跟代码如下:

self.window = [[UIWindow alloc]initWithFrame:[UIscreen mainScreen].bounds];
UITabBarController* TB =[ [UITabBarController alloc]init];
self.window,rootViewController = TB;
[self.window makeKeyAndVisible];

当时写上去之后没有错误,运行时报错,且程序卡在self.window 过不去,报的错误如下:
unrecongnized selector sent to instance

当时只针对这个错误进行查询了很久,不出所料的一无所获。后来在查阅的资料变多了之后,知道Xcode11对于之前的版本来说,增加了一些新的功能,在创建单一界面的app时,会比之前的要多出两个文件SceneDelegate.h和.m文件,也就是说之前的window的是由AppDelegate负责的,所以什么都不用做,直接使用self.window不会出错,但是在新版Xcode中,将这个交给了SceneDelegate负责,当发现这个之后,我又去查阅在新版中该怎么创建窗口,回答也是五花八门,但是比较多的有两种:
1.在AppDelegate.h中重新声明window,即添加
@property(nonatomic,strong)UIWindow* window;
对于Xcode11中对于APPDelegate所做的一些改动,导致的unrecongnized selector sent to instance错误_第1张图片

或者在AppDelegate.m中添加@synthenize window = _window;
对于Xcode11中对于APPDelegate所做的一些改动,导致的unrecongnized selector sent to instance错误_第2张图片

也有两个都加上的,我是两个都加上了,加上之后,可跳过Self.window,但是于此同时又出现了新的错误:
错误:The scene delegate must implement the window property if it wants to use a main…

针对这个错误,我实在是没有找到更好的方法,因为Xcode11中的SceneDelegate文件是针对ipad的多界面设计的,我用不到这个功能,所以就选择删除一些文件,让它变成之前的Xcode,所做的操作如下:
删除SceneDelagate.h还有.m文件,然后再将info.plist中Application Scene Manifest文件删除
对于Xcode11中对于APPDelegate所做的一些改动,导致的unrecongnized selector sent to instance错误_第3张图片

再将AppDeledate.m文件中相应函数删除,如图:
对于Xcode11中对于APPDelegate所做的一些改动,导致的unrecongnized selector sent to instance错误_第4张图片

再在AppDelegate中添加window的声明就可以了,还有的要添加生命周期中的四个方法,即:
对于Xcode11中对于APPDelegate所做的一些改动,导致的unrecongnized selector sent to instance错误_第5张图片

我试了一下,不添加也是完全可。
这些操作完之后,我的运行果然从之前的黑屏变得有画面了,嘿嘿…附图
对于Xcode11中对于APPDelegate所做的一些改动,导致的unrecongnized selector sent to instance错误_第6张图片

骚紫,是不是很好看,哈哈!!
如果有大佬有更好的方法,希望可以多多指教,那就这样啦!

你可能感兴趣的:(笔记,ios,编程语言,xcode,objective-c)