Swift - IBOutlet返回nil(fatal error: unexpectedly found nil while unwrapping an Optional value)


在Swift ViewController 默認構造方法不關聯同名的xib文件

在使用OC的時候,調用ViewController的默認構造函數,會自動關聯到一個與ViewController名字相同的xib文件上,

這樣無疑方便了開發者,減少了代碼量。但不知道為什么,在swift中,新建ViewController實例,不在默認關聯xib

一定要開發者指定xib的名字,這對於有代碼潔癖的人是不可接受的,因為通常情況下,

xib的名字一定是和ViewController的名字相同的。 

// Objective C中的寫法

TwoViewController *v = [[TwoViewController alloc] init]; //這樣會把TwoViewController默認關聯到TwoViewController.xib上

// 等同調用了方法

TwoViewController *v = [[TwoViewController alloc] initWithNibName:@"TwoViewController" bundle:nil];

// Swift中的寫法

let v = TwoViewController() //不會關聯TwoViewController.xib文件

// 一定要指定xib文件

let v = TwoViewController(nibName: "TwoViewController", bundle: nil)

// 我們改怎樣讓TwoViewController()去找同名字的xib文件呢,
// 其實原來很簡單,重寫init方法就行了, 
// 新建BaseViewController.swift 重寫init方法,
// 其他的ViewController繼續於BaseViewController。

override init() {

    // 獲取當前Class的名字,在swift中class名字前會加入Module名字,所以這里以'.'划分,取'.'后面的字符串.

    super.init(nibName: (self.classForCoder.description() as NSString).componentsSeparatedByString(".")[1] as NSString, bundle: NSBundle.mainBundle())

}

required init(coder aDecoder: NSCoder) {

    super.init(coder: aDecoder)

}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM