新建一个带viewController的iOS App项目中UIWindow默认是编译器自动创建的,并且还把self.window.rootViewController设置为项目自带的ViewController,那么,问题来了:如果想要把一个UITabBarController设置为rootViewController,那该怎么办呢?
我们一般会删除默认的ViewController,然后自己设置self.window.rootViewController = MYTabBarController(自定义的UITabBarController);这时,运行项目,我们会看到控制台输出一警告:" Unknown class ViewController in Interface Builder file ",因为项目已经跑起来了,所以一般就没人关心这句警告了,作为强迫症的我,想把这句警告去掉,该怎么办呢?
首先,我们要弄明白自动创建self.window.rootViewControlle的原理.要想弄明白这个问题,我们首先来看下Main.Storyboard的相关知识.
在TARGETS的general - Development info - Main interface选项,默认是Main,它的意思是:项目启动时首先运行Main.Storyboard,打开Main.Storyboard,我们看到它的View controller scene 是类型是ViewController,而且右边的is Initial View Controller 选项也打上勾了,这是指,在Main.Storyboard内部初始化了一个视图控制器,名字就叫ViewController.
现在,我们已经明白了:项目先运行Main.Storyboard,在Main.Storyboard内部初始化了一个试图控制器,名字就叫ViewController.那么,这个ViewController到底是怎样加在self.window.rootViewControlle的呢?重点来了,这个过程编译器自动帮我们实现的,在didFinishLaunchingWithOptions方法中,编译器自动创建的UIWindow,并设置self.window.rootViewControlle = ViewController;
那么,最后怎样删除Unknown class ViewController in Interface Builder file警告呢?
1 删除Main.Storyboard
2 删掉格式文件Info.plist中对应的键值,即删掉Main storyboard file base name...main
3 在didFinishLaunchingWithOptions里面手动创建self.window= [[UIWindowalloc]initWithFrame:[UIScreenmainScreen].bounds];