这是一个相当广泛的问题。您应该始终将模型数据存储在某种模型对象中,无论是 Core Data 实体,NSMutableDictionary
还是您自己创建的自定义对象。您绝对不应该将数据存储在一个NSTreeController
或NSOutlineView
实例中,这些不是模型对象。
如果您在应用程序的其余部分使用 Core Data,并且您需要保留由大纲视图操作的数据,那么这是一个不错的选择,但如果您只有简单的要求,它可能会有点矫枉过正。
要控制在大纲视图中显示的内容,您可以使用NSTreeController
或您自己的控制器对象来响应NSOutlineView
数据源和委托协议。在实践中,您可能会同时使用两者,因为某些事情(例如项目是否为组项目)只能由NSOutlineView
委托方法控制。
根据我的个人经验,我发现NSTreeController
除了非常简单的任务之外的任何事情都很难处理,我现在不再使用它,我发现在我自己的控制器中使用数据源方法要简单得多。
至于修改大纲视图的内容,你应该总是通过控制器来修改模型,你不应该直接更新视图。你可以-add:
在你的控制器中实现方法,或者使用如果你正在使用它的-add:
方法。NSTreeController
然后,您的视图控制器应检测模型中的更改并要求视图更新。视图控制器和模型控制器可以是同一个对象,但它们不是必须的。Key-Value Observing是一种有用的技术,可以通知控制器模型的变化。
以下是来自 Apple 的一些示例代码,您可能会发现它们很有用:
http://developer.apple.com/mac/library/samplecode/SourceView/
http://developer.apple.com/Mac/library/samplecode/AbstractTree/