Cocoa-修改NSOutlineView的最佳方式是什么

Cocoa-修改NSOutlineView的最佳方式是什么,cocoa,nsoutlineview,Cocoa,Nsoutlineview,结果应该是一个带有OutlineView和“添加项目”、“添加组”和“删除”按钮的设置面板。这些按钮将条目添加到NSOutlineView。数据存储在nsmutabledictionarsy(或任何合适的)中。为大纲视图启用排序/DragDrop 什么是最好或最舒适的方法(并且编写更少的代码) 修改NSMutableDictionary,NSOutlineView从NSMutableDictionary刷新? 修改NSOutlineView,结果存储在NSMutableDictionary中?

结果应该是一个带有
OutlineView
和“添加项目”、“添加组”和“删除”按钮的设置面板。这些按钮将条目添加到
NSOutlineView
。数据存储在
nsmutabledictionars
y(或任何合适的)中。为
大纲视图启用排序/DragDrop

什么是最好或最舒适的方法(并且编写更少的代码)

修改
NSMutableDictionary
NSOutlineView
NSMutableDictionary
刷新? 修改
NSOutlineView
,结果存储在
NSMutableDictionary
中? ... <代码>NSTreeController? ... <代码>核心数据

这方面的最佳做法是什么


提前谢谢

这是一个相当广泛的问题。您应该始终将模型数据存储在某种类型的模型对象中,例如核心数据实体、
NSMutableDictionary
或您自己创建的自定义对象。您绝对不应该将数据存储在
NSTreeController
NSOutlineView
实例中,它们不是模型对象

如果您正在为应用程序的其余部分使用核心数据,并且您需要持久化由大纲视图操纵的数据,那么这是一个不错的选择,但是如果您只有简单的需求,那么这可能会有些过分

要控制大纲视图中显示的内容,可以使用
NSTreeController
或您自己的控制器对象来响应
NSOutlineView
数据源和委托协议。实际上,您可以同时使用这两种方法,因为某些事情(例如项目是否为组项目)只能由
NSOutlineView
委托方法控制

根据我个人的经验,我发现除了非常简单的任务之外,任何事情都很难处理
NSTreeController
,我现在不再使用它,我发现在我自己的控制器中只使用数据源方法要简单得多

就修改大纲视图的内容而言,应始终通过控制器修改模型,而不应直接更新视图。您可以在控制器中实现诸如
-add:
之类的方法,或者如果正在使用
NSTreeController
-add:
方法

然后,视图的控制器应检测模型中的更改,并要求视图进行更新。视图控制器和模型控制器可以是同一个对象,但它们不必是同一个对象。关键值观察是一项有用的技术,可以将模型中的更改通知控制器

以下是苹果公司的一些示例代码,您可能会发现这些代码很有用:


NSTreeController
上调派。借用一句话,这是一个“伤害袋”。