mbp*_*pro 13 macos cocoa binding cocoa-bindings
虽然我搜索了很多关于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];
Run Code Online (Sandbox Code Playgroud)
完全相同:
[slicesTextField bind:@"value" toObject:self withKeyPath:@"numberOfPieSlices" options:nil];
[stepperControl bind:@"value" toObject:self withKeyPath:@"numberOfPieSlices" options:nil];
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我们讨论的是类的属性,其中发生了一切,所以我猜测NSObjectController的需要是:
控制器的关键路径是对象,其他控件的绑定需要它的属性,而不是它的值,就像它们的原语和它们周围的包装一样(在我的情况下,numberOfPiesSlices是NSInteger)
或者当需要从其他外部对象进行绑定时,不仅要在一个对象内进行绑定
任何人都可以确认或拒绝这个吗?
jrt*_*ton 11
绑定的好处之一是消除代码.为此,NSObjectController等具有以下优点:它们可以直接在界面构建器中使用,并通过绑定到各种UI元素进行设置.
绑定仅代表提供的功能的一部分.*ObjectController类还可以自动处理应用程序通常需要的许多其他更重复的控制器(如模型,视图,控制器)代码.例如,他们可以:
如果你没有这样做,那么可能不值得使用NSObjectController.它的子类(NSArrayController等)更有用.
另请参阅此处以了解您的确切问题!
如果我可以直接建立绑定,为什么需要NSObjectController?
我几天前在寻找有关NSObjectController的信息时阅读了这个问题,今天在继续搜索时,我发现了以下与该问题相关的段落:
如果绑定到该对象实现NSEditorRegistration,则有很多好处。这就是为什么绑定控制器对象而不是直接绑定到模型的一个好主意。NSEditorRegistration使绑定告诉控制器其内容正在编辑中。控制器跟踪当前正在编辑控制器内容的视图。例如,如果用户关闭窗口,则与该窗口关联的每个控制器都可以告诉所有此类视图立即提交其待处理的编辑,因此用户将不会丢失任何数据。Apple提供了一些通用控制器对象(NSObjectController,NSArrayController,NSTreeController),可用于包装模型对象,并提供编辑器注册功能。
使用控制器还具有绑定系统不会直接观察模型对象的优点-因此,如果您用新模型对象替换模型对象(例如在详细视图中,用户已更改了要检查的记录) ,您只需替换控制器内部的模型对象,KVO通知和绑定更新即可。
| 归档时间: |
|
| 查看次数: |
3100 次 |
| 最近记录: |