ios view的建立過程

來源:互聯網
上載者:User

ios view的建立過程

師傅發我一堆view的建立函數,目的讓我知道view的建立過程。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewWillAppear:(BOOL)animated{}- (void)viewDidAppear:(BOOL)animated{}- (void)loadView{}- (void)layoutSublayersOfLayer:(CALayer *)layer{}- (void)viewWillLayoutSubviews{} - (void)viewDidLoad{}

拿到這函數我也沒多想就建立了一個single View application 然後建立一個viewcontroller 就將師傅的函數複製進去,然後在AppDelegeteD.m檔案中寫

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];     self.window.rootViewController = [[MyViewController alloc]init];        [self.window makeKeyAndVisible];    // Override point for customization after application launch.    return YES;}

然後運行 。。。。。。涼了。。。出現錯誤了;

啟動起來黑屏,然後是報這樣一個錯誤Application windows are expected to have a root view controller at the end of application launch

2014-08-13 15:16:45.924 任務1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.925 任務1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.925 任務1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.926 任務1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.927 任務1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.927 任務1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.928 任務1副本[2629:60b] -[YouVC loadView]2014-08-13 15:16:45.928 任務1副本[2629:60b] -[YouVC viewDidLoad]2014-08-13 15:16:45.929 任務1副本[2629:60b] Application windows are expected to have a root view controller at the end of application launch



無解 ,網上搜得所有方案都不對。我把焦點放在了 self.window.rootviewcontroller = ....這句話上了;


我開始想它出錯的原因,為什麼這些方法調用了好幾遍,單步調試發現這些函數不止是在初始化的init時候調用。

我又建立了一個viewcontroller就加了一個背景色,結果能運行,我又試著將師傅給的代碼貼上去,結果又出現錯誤了。

我就開始挨個試是什麼出現了問題,最後讓我找到了原因出在-(void)loadview這個函數上面;

我又開始查詢這個函數,最後從M了個J老師這獲得了答案:

原來在每次調用view的時候,如果view為空白,則會調用這個函數;他的作用就是來建立一個view,首先載入xib 如果沒有xib 則自動建立一個大小320*480 的空白view;

在程式的

-(void)loadview 中加入了[super loadview];後程式能夠運行了;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}-(id)init{    if(self = [super init])    {        self.view.frame=[[UIScreen mainScreen]bounds];        self.view.backgroundColor = [UIColor orangeColor];    }    return self;}- (void)loadView{   // [super loadView];    NSLog(@"%s",__FUNCTION__);}- (void)viewDidLoad{    [super viewDidLoad];    NSLog(@"%s",__FUNCTION__);    // Do any additional setup after loading the view from its nib.}- (void)viewWillAppear:(BOOL)animated{    NSLog(@"%s",__FUNCTION__);}- (void)viewDidAppear:(BOOL)animated{    NSLog(@"%s",__FUNCTION__);}- (void)layoutSublayersOfLayer:(CALayer *)layer{    NSLog(@"%s",__FUNCTION__);    }- (void)viewWillLayoutSubviews{    NSLog(@"%s",__FUNCTION__);}

運行結果:

2014-08-13 15:35:54.783 任務1副本[2660:60b] -[YouVC loadView]2014-08-13 15:35:54.783 任務1副本[2660:60b] -[YouVC viewDidLoad]2014-08-13 15:35:54.784 任務1副本[2660:60b] -[YouVC viewWillAppear:]2014-08-13 15:35:54.785 任務1副本[2660:60b] -[YouVC viewWillLayoutSubviews]2014-08-13 15:35:54.835 任務1副本[2660:60b] -[YouVC viewDidAppear:]

這個就是 建立view的時候,相關view建立函數的運行次序:

M了個J老師的部落格 http://www.cnblogs.com/mjios/archive/2013/02/26/2933667.html裡面詳細講述了這幾個函數;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.