我有以下UIViewController
:
class ViewController: UIViewController{
var dayDatasource : DayDatasource;
init(){
self.dayDatasource = DayDatasource();
super.init(nibName:nil, bundle: nil);
}
required init?(coder aDecoder: NSCoder) {
self.dayDatasource = DayDatasource();
super.init(nibName:nil, bundle: nil);
}
override func viewDidLoad() {
super.viewDidLoad();
}
}
现在因为我声明dayDatasource
属性,swift强迫我创建init
方法。当我创建init
方法时,它会抱怨我需要为init
调用指定的UIViewController
方法。谷歌搜索后,显然指定的`init方法是:
super.init(nibName:nil, bundle: nil);
但是当我使用它时,我会得到一个后屏幕。如果我尝试以下内容:
super.init(nibName:"ViewController", bundle: NSBundle.mainBundle());
我收到以下错误:
无法在捆绑中加载NIB:'NSBundle'
在这种情况下我该怎么做?
答案 0 :(得分:0)
你应该这样写:
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
未将nibName
传递给nil或硬编码。
如果这可以解决您的问题
,请在评论中告诉我答案 1 :(得分:0)
如果您使用故事板segue进行导航,则应使用dayDatasource
或?
将!
设为可选或强制解包的可选项。这将阻止您要求您创建未使用的init方法。
然后,在您导航的视图控制器中,覆盖func prepare(for segue: UIStoryboardSegue, sender: Any?)
函数并设置dayDatasource
变量。
另一方面,如果这是第一个正在显示的视图控制器,或者您总是需要dayDatasource
的新实例,只需在变量声明中创建实例,就不再需要自定义init。
var dayDatasource = DayDatasource()