我有一个数组,它在我的GUI中由绑定到NSTableView的NSArrayController控制。底层数组位于ViewController中。
我想知道添加或删除新元素的时间。我特别想知道添加或删除的元素。
我尝试将NSArrayController子类化为覆盖添加/删除 - 这感觉是正确的方法,但我无法让它工作。
我最终做了以下事情:
@objc dynamic var dataArray: [ActivityGraphDefinition] = []{
willSet{ oldArray = dataArray}
didSet{ dataArrayChanged() }
}
通过获取oldArray的引用,我可以比较两者并找出dataArrayChanged()方法中添加或删除的内容。它有效,但确实感觉不对。
有更好的方法吗?我在线搜索但尚未找到合适的方法。
答案 0 :(得分:0)
您可以做的一个小改进是将其更改为:
@objc dynamic var dataArray: [ActivityGraphDefinition] = []{
didSet{ dataArrayChanged(old: oldValue, new: dataArray) }
}
didSet
闭包已经传入了一个名为oldValue
的参数。这至少可以节省您需要实现willSet
和另一个ivar(oldArray
)来比较旧与新的,所以更清洁,更简单。
它并没有真正改变你现有的拦截和处理变化的方法,但如果最终保持这种方法,它至少会简化它并减少状态。