iOS8 Swift无法使用xib创建视图控制器

时间:2016-08-24 08:30:15

标签: swift ios8 xib

我正在使用Swift,我正在修复iOS 8的一些错误。我使用.xib创建了一个视图控制器。例如,视图控制器和表格视图。

这是我创建.xib文件的方法。

1.我将tableView拖到视图中,enter image description here 2.设置文件所有者的类enter image description here 3.将视图拖动到文件的所有者enter image description here 4.drag the tableView到文件的所有者enter image description here我在文件的所有者

中有这个代码
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中运行良好。

有人可以帮助我吗?

3 个答案:

答案 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存在一些问题,比以后需要创建屏幕。