我正在使用Swift,我正在修复iOS 8的一些错误。我使用.xib创建了一个视图控制器。例如,视图控制器和表格视图。
这是我创建.xib文件的方法。
1.我将tableView拖到视图中, 2.设置文件所有者的类 3.将视图拖动到文件的所有者 4.drag the tableView到文件的所有者我在文件的所有者
中有这个代码for (int i=0; i<14; i++ ){
TableColumn col = table.getColumnModel().getColumn(i);
col.setCellEditor(new DefaultCellEditor((JComboBox<String>)(array[i])));
//here I found the data collection in each combo is empty
col.setCellRenderer(new ComboRenderer());
}
但是当我在iOS 8.4中运行这个APP并试图呈现这个视图控制器时,它会崩溃。 Xcode表示“在打开Optional值时意外地发现了nil”。这是因为tableView在此代码中为零。但它在iOS 9中运行良好。
有人可以帮助我吗?
答案 0 :(得分:2)
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
let classString = String(describing: type(of: self))
if Bundle.main.path(forResource: classString, ofType: "nib") == nil {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
} else {
super.init(nibName: nibNameOrNil ?? classString, bundle: nibBundleOrNil)
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
在iOS 8上,你需要调用这个方法,在iOS 9或更高版本上,系统修复了这个bug。 您可以得到答案here
答案 1 :(得分:1)
Tonin已经提供了正确的答案,但是对于每个努力将其转换为Swift 2.3的人来说,请点击此处:
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
let classString = String(MyClassName)
if NSBundle.mainBundle().pathForResource(classString, ofType: "nib") == nil{
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
} else {
super.init(nibName: nibNameOrNil ?? classString, bundle: nibBundleOrNil)
}
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
答案 2 :(得分:0)
在viewWillAppear
功能中设置代理。或者在界面构建器中。
iOS 8存在一些问题,比以后需要创建屏幕。