Resuld shout是一个带有OutlineView和“添加项目”,“添加组”和“删除”按钮的设置面板。按钮将条目添加到NSOutlineView。数据存储在NSMutableDictionary(或任何合适的)中。为OutlineView启用了Sorting / DragDrop。
最好或最舒服的方法是什么(并编写更少的代码)?
修改NSMutableDictionary,NSOutlineView从NSMutableDictionary刷新? 修改NSOutlineView,结果存储在NSMutableDictionary中? ... NSTreeController? ...... CoreData?
最佳做法是什么?
提前致谢!
答案 0 :(得分:1)
这是一个非常广泛的问题。您应始终将模型数据存储在某种模型对象中,即Core Data实体,NSMutableDictionary
或您自己创建的自定义对象。绝对不应该将数据存储在NSTreeController
或NSOutlineView
实例中,这些不是模型对象。
如果您正在为应用程序的其余部分使用Core Data,并且您需要保留大纲视图操作的数据,那么这是一个不错的选择,但如果您只有简单的要求,则可能过度。< / p>
要控制大纲视图中显示的内容,您可以使用NSTreeController
或您自己的控制器对象来响应NSOutlineView
数据源和委托协议。在实践中,您可以使用两者,因为某些事项(例如项是否是组项)只能由NSOutlineView
委托方法控制。
根据我的个人经验,我发现NSTreeController
对于任何非常简单的任务都很难处理,我现在更长时间使用它,我发现在我的数据源方法中使用数据源方法要简单得多自己的控制器。
就修改大纲视图的内容而言,应始终通过控制器修改模型,不应直接更新视图。您可以在控制器中实施-add:
等方法,或者使用-add:
NSTreeController
方法,如果您正在使用它。
然后,您的视图控制器应检测模型中的更改并要求视图更新。视图控制器和模型控制器可以是同一个对象,但不一定是这样。 键值观察是一项非常有用的技术,可以通知您的控制器模型的变化。
以下是Apple可能会发现有用的示例代码:
http://developer.apple.com/mac/library/samplecode/SourceView/
http://developer.apple.com/Mac/library/samplecode/AbstractTree/