可以将观察者放在 的selectedIndex
方法上NSArrayController
。我认为这种方法有一些缺点:
重新排列时会发生什么
arrangedObjects
?我承认这不是一个很重要的问题如果我们要求观察者记住 的旧值
selectedIndex
,它就不起作用。这是已知的,但我无法再次找到该链接。
为什么 NSArrayController 没有委托?有其他方法可以实现我想做的事情:选择选择时启动一些方法?
可以将观察者放在 的selectedIndex
方法上NSArrayController
。我认为这种方法有一些缺点:
重新排列时会发生什么arrangedObjects
?我承认这不是一个很重要的问题
如果我们要求观察者记住 的旧值selectedIndex
,它就不起作用。这是已知的,但我无法再次找到该链接。
为什么 NSArrayController 没有委托?有其他方法可以实现我想做的事情:选择选择时启动一些方法?
观察(它继承自)selection
的键。NSArrayController
NSObjectController
它将返回任何一个NSMultipleValuesMarker
(选择许多对象),NSNoSelectionMarker
(当不选择任何对象),或代表所选对象的代理,然后通过self
键查询原始对象值。
如果重新排列对象实际上并没有改变选择,它不会改变。
也可以观察selectedObjects
;在这种情况下,您不需要处理标记。
在 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
}
}