xcode - 类的实例不在类中初始化 IBOutlets

标签 xcode swift initialization iboutlet

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

谢谢,
比格列罗

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 时,它不是 nil。

关于xcode - 类的实例不在类中初始化 IBOutlets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710287/

相关文章:

java - 初始化子类字段

ios - 无法导入 AVFoundation.framework,所以应用无法播放音乐?

ios - 如何使用一个 UIDatePicker 在单击一个按钮时仅显示时间,在另一个按钮单击时仅显示日期?

ios - 从 Firestore Swift 获取文档 ID

swift - Xcode 8 故障选项卡栏 View Controller 。 (主从)

c++ - 如何使 C++ 函数将整数列表隐式转换为 vector 参数?

c++ - 在 C++ 中的数组初始化期间使用数组成员

ios - 自定义 UITableViewCell 元素在 Interface Builder 中被截断

objective-c - Xcode 4.4.1 & 核心情节 : Apple LLVM compiler error when compiling Core Plot demo apps

swift - iOS 图表:如何在数据输入图标/圆点下绘制值?