Swift 在NSOutlineView中显示NSDictionary的内容并更新此数据

Swift 在NSOutlineView中显示NSDictionary的内容并更新此数据,swift,cocoa,nsdictionary,nsoutlineview,Swift,Cocoa,Nsdictionary,Nsoutlineview,我需要在NSOutlineView中显示NSDictionary的内容。 为此,我使用了一个保存数据的结构,该结构被我的NSOutlineView用作数据源 struct DataItem { var caption : String var text : String } dataInOutlineView: [DataItem] 我在我的NSDictionary中循环所有项目,并将它们添加到我的数据数组中 data.append(DataItem(caption: &qu

我需要在
NSOutlineView
中显示
NSDictionary
的内容。 为此,我使用了一个保存数据的结构,该结构被我的
NSOutlineView
用作数据源

struct DataItem {
    var caption : String
    var text : String
}

dataInOutlineView: [DataItem]
我在我的
NSDictionary
中循环所有项目,并将它们添加到我的数据数组中

data.append(DataItem(caption: "KeyFromDict", text: "TextFromDict"))
然后重新加载我的
NSOutlineView

outlineView.reloadData()
这个概念很有效,但我的问题是,
NSDictionary
中的数据会定期更改,我希望在
NSOutlineView
中显示更新的值

我的第一次尝试是从数组中删除所有项

 data.removeAll
然后使用上述方法再次添加数据,然后再次重新加载
NSOutlineView
,但这会导致
NSOutlineView
的完全刷新,这意味着所有展开的项目都会再次折叠,并且
NSOutlineView
会滚动到顶部

有什么更好的办法来实现这一点?(如果没有,是否有方法使用上述方法更新数据,但保持所有展开/折叠和滚动位置状态?)


谢谢

替换数据将替换大纲视图的内容。如果要更新内容,请更新数据。请参阅“outline视图中的每个项目都必须是唯一的。为了使折叠状态在重新加载之间保持一致,项目的指针必须保持不变,并且项目必须保持等相等(:)相同。”好的,但有些项目如何做到这一点?在DataItem内创建一个计时器,读取一个特定元素的内容?而不是
数据。移除
NSDictionary
中的所有
循环项,并在数据数组中更新它们。如果无法保持指针的完整性,则可以在加载数据之前保存折叠的部分并滚动视图边界,然后再设置一次。在目标C中,您可以设置
NSPoint scrollPosition=scrollView.contentView.bounds.origin
,然后重新加载数据并调用
[scrollView.contentView scrollPoint:scrollPosition]