0

结果应该是一个带有OutlineView“添加项目”、“添加组”和“删除”按钮的设置面板。这些按钮将条目添加到NSOutlineView. 数据存储在NSMutableDictionary (或任何合适的)中。为OutlineView.

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

修改NSMutableDictionaryNSOutlineView刷新自NSMutableDictionary? 修改NSOutlineView,Result存储在NSMutableDictionary?... NSTreeController? ... CoreData?

最好的做法是什么?

提前致谢!

4

1 回答 1

2

这是一个相当广泛的问题。您应该始终将模型数据存储在某种模型对象中,无论是 Core Data 实体,NSMutableDictionary还是您自己创建的自定义对象。您绝对不应该将数据存储在一个NSTreeControllerNSOutlineView实例中,这些不是模型对象。

如果您在应用程序的其余部分使用 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/

于 2010-01-07T08:40:52.777 回答