objective-c - Cocoa Bindings,我应该只使用 KVO 吗?

标签 objective-c cocoa binding cocoa-bindings

   [self.toolController bind:@"fillColor" toObject:self.fillColorWell withKeyPath:@"color" options:kvoDict];

对比

   [self.fillColorWell addObserver:self.toolController forKeyPath:@"color" options:NSKeyValueObservingOptionNew context:nil];

在我的 toolController 类中,在我的 -observeValueForKeyPath:...

实现中
if( [keyPath isEqual:@"color"] ) {
  self.fillColor = [object selectedObject];
}

为什么我要选择一种方法而不是另一种方法来使 View 更新到我的模型属性?

最佳答案

对于绑定(bind),您必须编写的唯一代码是绑定(bind)本身,仅此而已。使用 KVO,您必须编写代码来处理通知。如果您绑定(bind) UI 并使用 Interface Builder,那么您根本不需要任何代码,这对于更简单的事情来说可能很有用/节省时间+您不必通用编写样板代码来保持事情与您同步将响应 KVO 通知。

我读过其他内容,但据我了解(我做了一个快速的新项目来验证这一点),绑定(bind)是双向的。因此,如果将文本字段绑定(bind)到 NSString,则当文本字段更新时变量会发生变化,并且您可以更改变量并且文本字段也会更新。 KVO 只会通知您指定更新的对象。

有人说绑定(bind)不好,认为它们不属于 iOS 等是件好事,但它们适用于简单的情况,所以也许你应该使用绑定(bind),直到发现它们不合适的情况。但话虽如此,如果您想在某个时候将代码转移到 iOS...

希望这对您来说是一个足够好的答案:)

关于objective-c - Cocoa Bindings,我应该只使用 KVO 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30672959/

相关文章:

ios - 带有 UISegmentedControl 的 UINavigationBar 部分覆盖了 childViews

cocoa - 如何使用 ServiceManagement 登录时启动 Cocoa 应用程序

objective-c - 可变对象与不可变对象(immutable对象)的性能

iphone - GCD 的后进先出堆栈?

objective-c - 范围超出范围的子字符串?

objective-c - NSMenuItem 中的自定义 View 禁用 NSPopUpButton 选择

macos - 系统通知窗口卡住导致程序卡住[Cocoa][Mac OSX]?

C# WPF 绑定(bind)到数据库

WPF MVVM 图表更改轴

绑定(bind) Ember TextField 中的计算属性