53-通过xib创建窗口控制器(initWithNibName方法底层)

来源:互联网 发布:优化方案系列丛书答案 编辑:程序博客网 时间:2024/05/16 02:26
#import “AppDelegate.h”
//xib描述的控制器
#import 
"rootViewController.h"
@interface AppDelegate ()
@end
@implementation AppDelegate

- (
BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    

    
/*
     
使用xib创建窗口控制器的常见错误:
     
     1.
     
错误原因:当创建的xib里面是空的,没有任何描述控制器的View的时候就作为窗口控制器会报错
     
错误信息:was unable to load a nib named "rootViewController"
     
解决:xib中添加一个View
     
     2.
     
错误原因:没给xib中绑定Flie 'owner
     
错误信息:loaded the "rootViewController" nib but the view outlet was not set.'
     
解决:xib中绑定Flie 'owner,告诉xib是描述哪一个控制器
     
     3.
     
错误原因:没有连线
     
错误信息: nib but the view outlet was not set.
     
解决:xibFlie 'ownerView和当前xib连线
     */

    
    
/*
     
通过xib创建的控制器步骤
     1.
xib有一个View描述控制器的View,设置Flie 'ownerclass
     2.
xib中的View跟控制器绑定(连线)
     */

    //创建窗口控制器 xib
    
//xib=Nib
    
 rootViewController *rootVc=[[rootViewController allocinitWithNibName:@"rootViewController" bundle:nil];
    
    
self.window.rootViewController=rootVc;
    [
self.window makeKeyAndVisible];
    
return YES;


    /*
     
通过xib创建的控制器

     
如果NibName=nil,默认加载与控制器类名相同的xib(rootViewController.h)
     rootViewController *vc=[[rootViewController alloc] init]
     init 
方法底层调用的就是initWithNibName方法
     
     initWithNibName方法底层
    -(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
                //1.首先判断下当前控制器是否重写了loadView方法
        //2.如果没有重写,进行下面判断
        
//3.判断nibName否为空,如果为空,默认去寻找跟类名相同但是不带ControllerView.xib
        
//4.接着去寻找和类名完全相同的xib,ViewController.xib
        
//5.如果都没有找到,就自动创建一个颜色几乎透明的View
      return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    }

     */

 }
0 0
原创粉丝点击