应该是一个带有OutlineView和“添加项目”,“添加组”和“删除”按钮的设置面板。这些按钮将条目添加到NSOutlineView。数据存储在NSMutableDictionary(或任何合适的格式)中。为OutlineView启用了Sorting / DragDrop。
最佳或最舒适的方法是什么(减少编写代码)?
修改NSMutableDictionary,NSOutlineView是否从NSMutableDictionary刷新?
修改NSOutlineView,结果存储在NSMutableDictionary中吗?
... NSTreeController?
... CoreData?
最佳做法是什么?
提前致谢!
最佳答案
这是一个相当广泛的问题。您应该始终将模型数据存储在某种类型的模型对象中,无论是Core Data实体,NSMutableDictionary
还是您自己创建的自定义对象。您绝对不应该将数据存储在NSTreeController
或NSOutlineView
实例中,因为它们不是模型对象。
如果您在应用程序的其余部分使用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/