gpt4 book ai didi

Cocoa - 修改 NSOutlineView 的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-03 18:06:12 24 4
gpt4 key购买 nike

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

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

修改NSMutableDictionaryNSOutlineViewNSMutableDictionary刷新?修改NSOutlineView,结果存储在NSMutableDictionary中?... NSTreeController?... CoreData

最佳实践是什么?

提前致谢!

最佳答案

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

如果您将核心数据用于应用程序的其余部分,并且需要保留由大纲 View 操作的数据,那么这是一个不错的选择,但如果您只有简单的需求,则可能有点过分了。

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

根据我的个人经验,我发现 NSTreeController 对于非常简单的任务之外的任何事情都非常难以处理,我现在不再使用它,我发现仅使用数据源要简单得多我自己的 Controller 中的方法。

就修改大纲 View 的内容而言,您应该始终通过 Controller 修改模型,而不应该直接更新 View 。您可以在 Controller 中实现诸如 -add: 之类的方法,或者使用 NSTreeController-add: 方法(如果您正在使用它)。

然后, View 的 Controller 应该检测模型中的更改并要求 View 更新。 View Controller 和模型 Controller 可以是同一个对象,但它们不一定是。 键值观察是一项有用的技术,可以通知您的 Controller 模型的更改。

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

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com