1

可以将观察者放在 的selectedIndex方法上NSArrayController。我认为这种方法有一些缺点:

  • 重新排列时会发生什么arrangedObjects?我承认这不是一个很重要的问题

  • 如果我们要求观察者记住 的旧值selectedIndex,它就不起作用。这是已知的,但我无法再次找到该链接。

为什么 NSArrayController 没有委托?有其他方法可以实现我想做的事情:选择选择时启动一些方法?

4

2 回答 2

5

观察(它继承自)selection的键。NSArrayControllerNSObjectController

它将返回任何一个NSMultipleValuesMarker(选择许多对象),NSNoSelectionMarker(当不选择任何对象),或代表所选对象的代理,然后通过self键查询原始对象值。

如果重新排列对象实际上并没有改变选择,它不会改变。

也可以观察selectedObjects;在这种情况下,您不需要处理标记。

于 2014-01-23T15:01:03.547 回答
1

在 Swift 4 中提供 hamstergene 的优秀解决方案。

viewDidLoad中,观察关键路径。

arrayController.addObserver(self, forKeyPath: "selectedObjects", options: .new, context: nil)

在视图控制器中,

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    guard let keyPath = keyPath else { return }

    switch keyPath {

    case "selectedObjects":
        // arrayController.selectedObjects has changed

    default:
        break
    }
}
于 2019-02-18T07:57:23.947 回答