应该是一个带有OutlineView和“添加项目”,“添加组”和“删除”按钮的设置面板。这些按钮将条目添加到NSOutlineView。数据存储在NSMutableDictionary(或任何合适的格式)中。为OutlineView启用了Sorting / DragDrop。

最佳或最舒适的方法是什么(减少编写代码)?

修改NSMutableDictionary,NSOutlineView是否从NSMutableDictionary刷新?
修改NSOutlineView,结果存储在NSMutableDictionary中吗?
... NSTreeController?
... CoreData?

最佳做法是什么?

提前致谢!

最佳答案

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

如果您在应用程序的其余部分使用Core Data,并且需要保留由大纲视图操作的数据,那么这是一个不错的选择,但是如果您仅具有简单的要求,则可能会显得过高。

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

根据我的亲身经历,我发现NSTreeController可能很难处理超出非常简单任务之外的任何事情,现在我不再使用它了,我发现仅在自己的控制器中使用数据源方法要简单得多。

至于修改大纲视图的内容,您应该始终通过控制器修改模型,而永远不要直接更新视图。您可以在控制器中实现-add:之类的方法,或者使用-add:NSTreeController方法。

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

以下是一些来自Apple的示例代码,您可能会觉得有用:

http://developer.apple.com/mac/library/samplecode/SourceView/

http://developer.apple.com/Mac/library/samplecode/AbstractTree/

关于cocoa - cocoa -修改NSOutlineView的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2019048/

10-12 05:39