macos - 为什么我要使用 NSObjectController?

标签 macos cocoa binding cocoa-bindings

虽然我已经搜索了很多关于 Cocoa Bindings 的信息,但我对我所拥有和得到的信息仍然相对不满意。似乎这个话题对很多人来说有点麻烦,很多人只是回避这种模式,我认为这是不应该的。

当然,绑定(bind)有时看起来太复杂,或者设计时开销太大......

但是,我有一个非常直接和具体的问题:如果我可以直接建立绑定(bind),为什么还需要 NSObjectController?

例如代码:

[controller bind:@"contentObject" toObject:self withKeyPath:@"numberOfPieSlices" options:nil];

[slicesTextField bind:@"value" toObject:controller withKeyPath:@"content" options:nil];
[stepperControl bind:@"value" toObject:controller withKeyPath:@"content" options:nil];

与以下内容完全相同:

[slicesTextField bind:@"value" toObject:self withKeyPath:@"numberOfPieSlices" options:nil];
    [stepperControl bind:@"value" toObject:self withKeyPath:@"numberOfPieSlices" options:nil];

就我而言,我们正在讨论发生所有事情的类的属性,因此我猜测何时需要 NSObjectController:

  • Controller 的关键路径是对象,其他控件需要绑定(bind)到其属性,而不是像基元和围绕它们的包装器那样绑定(bind)到其值(在我的情况下,numberOfPiesSlices 是 NSInteger)

  • 或者当需要与其他外部对象进行绑定(bind)时,而不仅仅是一个对象之间的绑定(bind)

有人可以确认或拒绝这一点吗?

最佳答案

绑定(bind)的好处/要点之一是消除代码。为此,NSObjectController 等的优点是它们可以直接在界面构建器中使用,并设置与各种 UI 元素的绑定(bind)。

绑定(bind)仅代表所提供的部分功能。 *ObjectController 类还可以自动处理应用程序通常需要的许多其他更重复的 Controller (如模型、 View 、 Controller )代码。例如,他们可以:

  • 连接到您的核心数据存储并执行必要的提取、插入和删除
  • 管理撤消/重做堆栈
  • 拾取已编辑但未提交的 UI 更改并保存它们(例如,如果窗口关闭而焦点仍位于已编辑的文本字段上 - 这对我来说是一个新变化,我从 mmalc 在线程中的回答中找到了它以下)。

如果您没有这样做,那么可能不值得使用 NSObjectController。它的子类(NSArrayController 等)更有用。

另请参阅here讨论您的确切问题!

关于macos - 为什么我要使用 NSObjectController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8647407/

相关文章:

objective-c - PackageMaker 的麻烦

c++ - 在 Qt Creator 中设置 OSX 的应用程序图标

Xcode 10.3 不适用于 MacOS Big Sur 11.0.1(非测试版)

objective-c - 如何对 NSCoding 进行单元测试?

objective-c - Fabric macOS 异常有时没有被捕获?

c# - 简单的 WPF 绑定(bind)不起作用

javascript - “listener” 参数必须是函数类型。 MacOS 上的 Node.JS 9.3.0_1 有问题

cocoa - 在 NSTextView 中查找字符中心

binding - 如何刷新、重制 lambda 上的词法绑定(bind)?

c# - TemplateBinding 不适用于扩展 ComboBox 的自定义控件中的 SelectedItem