类的实例不会在类中初始化IBOutlets

时间:2015-02-25 02:53:29

标签: xcode swift initialization iboutlet

我有一个名为AccountPanelController的类,它包含两个变量:一个IBOutlet到NSTableView,以及一个简单的Int。当我运行我的应用时,awakeFromNib:会打印NSTableViewInt已初始化。在另一个文件中,我创建并初始化了类AcountPanelController的实例。通过连接到其他文件的按钮,我在实例上调用openPanel:。那时accountTable不存在,但不知何故number。换句话说,当我初始化我的类的实例时,正在创建Int,但NSTableView(IBOutlet)不是。为什么是这样?我认为这是因为accountTable是一个IBOutlet,因此不会重新初始化。我该怎么办? (Xcode Version 6.1.1(6A2008a),Cocoa,Swift)

谢谢,
bigelerow

class AccountPanelController: NSObject, NSTableViewDataSource {

    @IBOutlet weak var accountTable: NSTableView!
    var number: Int = 5

    override func awakeFromNib() {
        println(accountTable) // prints "<NSTableView: 0x100512aa0>"
        println(number) // prints "5"
    }

    func openPanel() {
        println(number) // prints "5"
        println(accountTable) // prints "nil"
        accountTable.reloadData() // throws error "unexpectedly found nil while unwrapping an Optional value"
    }

    // NSTableView data source functions below...

}


其他档案

@IBAction func buttonPressed(sender: AnyObject?) {
    var instance = AccountPanelController()
    instance.openPanel()
}

1 个答案:

答案 0 :(得分:0)

IB在加载xib文件时自动使用IBOutlets创建所有对象的实例。因此,而不是在另一个文件中创建我自己的第二个实例:
var instance = AccountPanelController()

我只是提到了IB已经为我做过的实例:
IBOutlet weak var IBInstance: AcountPanelController!

与第二个实例不同,此IB创建的版本包含初始化的IBOutlets。当我引用AccountTable时,它不是零。