虽然我已经搜索了很多关于 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/