尽管我搜索了许多有关可可绑定的信息,但我仍然相对不满意所获得的信息。似乎该主题对许多人来说有些麻烦,许多人只是在避免这种模式,我认为这不是应该的。

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

但是,我有一个非常直接且具体的问题:如果可以直接建立绑定,为什么需要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:


控制器的关键路径是对象,并且需要将其他控件绑定到其属性,而不是绑定到其值,例如原语和包装器(在我的情况下,numberOfPiesSlices是NSInteger)
或需要与其他外部对象绑定时,不仅限于一个对象内的对象之间


有人可以确认或拒绝吗?

最佳答案

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

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


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


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

另请参见here,以讨论您的确切问题!

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

10-10 20:35