反向Cocoa绑定并识别绑定目标视图?

时间:2012-06-07 18:57:47

标签: cocoa cocoa-bindings

我有一个公开NSString属性的自定义类。在Interface Builder中,我已将title的{​​{1}}绑定到我的自定义类的属性。

是否可以从我的自定义类中获取对NSButton实例的引用?

基本上我试图找到绑定到我的自定义类中的属性的所有用户界面元素。

1 个答案:

答案 0 :(得分:0)

一般来说,这听起来像反模式和/或坏主意。也就是说,有几件事需要牢记。多个观察者可以绑定到您的财产。您可以覆盖addObserver:forKeyPath:options:context:removeObserver:forKeyPath:(以及removeObserver:forKeyPath:context:),然后维护自己的观察者数组。有了这种方法,我会提醒你,你可能需要额外的努力让数组不能保留观察者,因为传统的KV观察不会保留观察对象,如果你开始保留,你可能会遇到泄漏/堆增长把它们放在NSArray

覆盖addObserver:...removeObserver:...的另一个问题是,如果没有相当多的额外工作,您不会知道观察是针对绑定还是针对其他内容(例如,依赖的keyPath通知) )。一种可能的解决方法是使用infoForBinding:在稍后的runloop传递上通过exposedBindingsperformSelector:afterDelay:上询问观察者。 (我想我只是在我嘴里吐了一点建议。)

依赖KVO系统的私人实施细节可能不是一个好方法,除非你的目标只是为了更好地理解KVO的工作原理,但听起来你实际上是想要完成某些事情。

真的,这整个方法感觉就像灾难一样。从一开始就听起来像MVC违规。为什么模型对象需要知道视图对象?无论你想要在这里完成什么,几乎肯定会通过让nib归NSViewController子类所拥有更好来实现,该子类具有所有UI元素的IBOutlets和模型的属性。然后,该对象可以更清晰地管理视图和模型对象之间明显复杂的关系,而无需运行时欺骗。既然你没有详细说明这个诡计的最终目标,那么很难说最好的方法是什么。