class 的实例未在 class 中初始化 IBOutlets
Instance of class does not initialize IBOutlets in class
我有一个名为 AccountPanelController
的 class,它包含两个变量:一个 IBOutlet 到 NSTableView
,以及一个简单的 Int
。当我 运行 我的应用程序时,awakeFromNib:
打印出 NSTableView
和 Int
都已初始化。在另一个文件中,我创建并初始化了 class AcountPanelController
的一个实例。通过连接到另一个文件的按钮,我在实例上调用 openPanel:
。那时 accountTable
不存在,但不知何故 number
存在。换句话说,当我初始化我的 class 的实例时,正在创建 Int
,但 NSTableView
,一个 IBOutlet,不是。为什么是这样?我假设这是因为 accountTable
是一个 IBOutlet,因此不会重新初始化。我该怎么办? (Xcode 版本 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()
}
IB 在加载它们的 xib 文件时自动创建具有 IBOutlets 的所有对象的实例。因此,不是在另一个文件中创建我自己的第二个实例:
var instance = AccountPanelController()
我只是引用了 IB 已经为我制作的实例:
IBOutlet weak var IBInstance: AcountPanelController!
与第二个实例不同,此 IB 创建的版本包含已初始化的 IBOutlets。当我引用 AccountTable
时,它不是零。
我有一个名为 AccountPanelController
的 class,它包含两个变量:一个 IBOutlet 到 NSTableView
,以及一个简单的 Int
。当我 运行 我的应用程序时,awakeFromNib:
打印出 NSTableView
和 Int
都已初始化。在另一个文件中,我创建并初始化了 class AcountPanelController
的一个实例。通过连接到另一个文件的按钮,我在实例上调用 openPanel:
。那时 accountTable
不存在,但不知何故 number
存在。换句话说,当我初始化我的 class 的实例时,正在创建 Int
,但 NSTableView
,一个 IBOutlet,不是。为什么是这样?我假设这是因为 accountTable
是一个 IBOutlet,因此不会重新初始化。我该怎么办? (Xcode 版本 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()
}
IB 在加载它们的 xib 文件时自动创建具有 IBOutlets 的所有对象的实例。因此,不是在另一个文件中创建我自己的第二个实例:
var instance = AccountPanelController()
我只是引用了 IB 已经为我制作的实例:
IBOutlet weak var IBInstance: AcountPanelController!
与第二个实例不同,此 IB 创建的版本包含已初始化的 IBOutlets。当我引用 AccountTable
时,它不是零。