首页 > 移动平台 > 详细

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

时间:2016-02-19 18:45:41      阅读:628      评论:0      收藏:0      [点我收藏+]

在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)

}

  

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

原文:http://www.cnblogs.com/Rinpe/p/5201800.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!