虽然我搜索了很多关于Cocoa Bindings的信息,但我仍然对我所获得的信息相对不满意。似乎这个话题对许多人来说有点麻烦,很多人只是避免这种模式,我认为不应该这样。
当然,看起来绑定有时候太复杂,或者设计的开销太多......
但是,我有一个非常直接和具体的问题:如果我可以直接建立绑定,为什么需要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)
< / LI>或当需要从其他外部对象进行绑定时,不仅要在一个对象之间进行绑定
有人可以确认或拒绝吗?
答案 0 :(得分:10)
绑定的好处之一是消除代码。为此,NSObjectController等具有以下优点:它们可以直接在界面构建器中使用,并通过绑定到各种UI元素进行设置。
绑定仅代表提供的部分功能。 * ObjectController类还可以自动处理应用程序通常需要的许多其他更重复的控制器(如模型,视图,控制器)代码。例如,他们可以:
如果你没有这样做,那么可能值得使用NSObjectController。它的子类(NSArrayController等)更有用。
另请参阅here,了解您的确切问题!
答案 1 :(得分:4)
如果我可以直接建立绑定,为什么需要NSObjectController呢?
我几天前在寻找有关NSObjectController的一些信息时阅读了这个问题,今天在继续我的搜索时,我发现the following passage似乎与这个问题有关:
如果对象被绑定到实现,则会有好处 NSEditorRegistration。这就是为什么绑定是一个好主意的原因之一 到控制器对象而不是直接绑定到模型。 NSEditorRegistration让绑定告诉控制器它的 内容正在编辑过程中。控制器跟踪 其中的视图当前正在编辑控制器的内容。如果 用户关闭窗口,例如,与之关联的每个控制器 该窗口可以告诉所有这些视图立即提交他们的 待编辑,因此用户不会丢失任何数据。 Apple提供一些通用控制器对象(NSObjectController, NSArrayController,NSTreeController),可以用来包装你的 模型对象,提供编辑器注册功能。
使用 控制器还具有绑定系统不具有的优点 直接观察模型对象 - 所以如果你替换你的模型 具有新对象的对象(例如在用户具有的详细视图中) 改变了正在检查的记录),你可以直接替换 控制器内部的模型对象,KVO通知和绑定 更新。