2012-06-07 34 views
3

我有一个自定义类,公开NSString属性。在Interface Builder中,我已将NSButtontitle绑定到我的自定义类的属性。反向Cocoa绑定并确定绑定目标视图?

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

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

+0

我没有提供完整的解决方案,但我建议覆盖'-addObserver:forKeyPath:options:context:'。我认为你需要在绑定的控制器上这样做。 – paulmelnikow

+0

你试图完成什么?也许还有另一种方法可以利用不同的绑定,查看子类或KVO。 – paulmelnikow

+0

' - (void *)observationInfo'可能会产生有用的信息,我不确定。 – Vervious

回答

0

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

其他疑难杂症具有压倒一切的addObserver:...removeObserver:...是,如果没有相当大的额外的工作,你不会知道,如果观察是其他具有约束力或东西(比如说,一个依赖的keyPath通知)。一种可能的解决方法是通过infoForBinding:询问观察员在所有的exposedBindings上使用performSelector:afterDelay:后来的循环回合。 (我想我只是吐了一口,因为有人提出这个建议)。

依赖于KVO系统的私有实现细节不太可能是一种好方法,除非您的目标仅仅是为了更好地理解KVO作品,但它听起来像你实际上正在努力完成一些事情。

真的,这整个方法就像是一场灾难。这听起来像是一个MVC违规从一开始。为什么模型对象需要了解视图对象?无论你想在这里完成什么,几乎可以肯定,通过使nib由拥有所有UI元素的IBOutlets的NSViewController子类以及模型的属性拥有,可以更好地完成。那么这个对象就可以更干净地管理视图和模型对象之间明显复杂的关系,而无需运行时欺骗。既然你没有详细阐述这个诡计的最终目标,很难说最好的方法是什么。