0

这很奇怪。我有一个包含三个实体的模型。像这样: 在此处输入图像描述

在 InterfaceBuilder 中,我将 NSArrayController 通过 RepresentedObject 连接到 MOC 到 ViewController。一切正常,我可以添加和删除主对象,选择它们,我可以绑定到 TableView 并编辑它们。但是,如果我将 NSArrayControler 子类化为 MasterController 并仅添加观察者:

class MastersController: NSArrayController {

override func awakeFromNib() {
    self.addObserver(self, forKeyPath: "selection", options: NSKeyValueObservingOptions.old, context: nil)
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    Swift.print("observing", keyPath ?? "<no path>")
    switch keyPath! {
    case "selection":
        Swift.print("selection Changed")
    default: break

    }
}

TableView 没有看到已经存在的对象,只是添加了。我可以编辑它们。但是当我再次打开文档时,新添加的对象也消失了。如果我将控制器的类改回 NSArrayController 我可以再次看到它们。

有什么帮助吗?

4

2 回答 2

1

我几乎可以肯定observeValue(forKeyPath:of:change:context:)是在内部使用的NSArrayController,你应该打电话super.observeValue(forKeyPath:of:change:context:)来获得预期的行为......

于 2017-06-21T10:59:54.510 回答
0

通过调用super.awakeFromNib()覆盖解决了问题func awakeFromNib()

于 2017-06-21T12:38:11.000 回答