我在 IB 中创建了一个带有相应 XIB 的 NSViewController。FWIW,我有以下窗口/视图层次结构:
class RxDemoController: NSWindowController {
@IBOutlet weak var statusPaneView: NSView!
@IBOutlet weak var annunciatorPaneView: NSView!
@IBOutlet weak var trigaStatusPaneView: NSView!
@IBOutlet weak var rxTabView: NSView!
override var windowNibName :String? { return "RxDemoController" }
override func windowDidLoad() {
super.windowDidLoad()
let statusPaneViewController = StatusPaneViewController()
statusPaneView.addSubview( statusPaneViewController.view )
let annunciatorPaneViewController = AnnunciatorPaneViewController()
annunciatorPaneView.addSubview( annunciatorPaneViewController.view )
let trigaStatusPaneController = TrigaStatusPaneController()
trigaStatusPaneView.addSubview( trigaStatusPaneController.view )
let rxTabController = RxTabController()
rxTabView.addSubview( rxTabController.view )
}
}
我们可以忽略 statesPaneViewController、annunciatorPaneViewController 和 trigaStatusPaneController,因为它们都工作正常。rxTabController 对象是一个选项卡视图,在 RXTabController.swift 中定义如下:
class RxTabController: NSTabViewController {
@IBOutlet weak var rxDisplay1TabView: NSView!
override var nibName :String? { return "RxTabController" }
override func viewDidLoad() {
super.viewDidLoad()
let rxDisplay1ViewController = RxDisplay1()
rxDisplay1TabView.addSubview( rxDisplay1ViewController.view )
}
RxDisplay1.xib 当前包含两个对象:一个条形图对象(自定义组件:LinearBarGraph_t 在其他项目中运行良好,在第一个选项卡的视图控制器上运行良好),第二个对象是 NSSlider。NSSlider 给我带来了问题。这是 RxDisplay1 的代码:
class RxDisplay1: NSViewController {
@IBOutlet weak var linearPwrBG: LinearBarGraph_t!
override func viewDidLoad() {
super.viewDidLoad()
linearPwrBG.pctInRange = 50
}
@IBAction func linearPwrSlider(sender: NSSlider) {
}
}
我从条形图对象中向右拖动以生成 @IBOutlet 弱 var linearPwrBG: LinearBarGraph_t! 出口; 请注意,在 viewDidLoad 中,我将 pctInRange 字段设置为 50。这在应用程序启动时工作正常(条形图填充到 50% 标记)。
问题出在滑块上。我已经从滑块向右拖动到 RxDisplay1 类以生成 linearPwrSlider 动作函数。连接似乎很好(函数声明旁边的小实心点,右键单击滑块显示转到此函数的操作)。
当我运行代码时,显示(和选项卡)正确出现。我的条形图显示 50% 的功率。但是,当我用鼠标触摸滑块时,系统崩溃了。我在 AppDelegate 中休息,抱怨“访问不正确”。
我在过去的项目中一直使用滑块。但是,这是我第一次使用选项卡式控制器,所以我怀疑我将选项卡式控制器连接到系统其余部分的方式有问题。