3

我有一个公开NSString属性的自定义类。在 Interface Builder 中,我已将titlean绑定NSButton到我的自定义类的属性。

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

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

4

1 回答 1

0

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

另一个具有覆盖性的问题addObserver:...removeObserver:...,如果没有大量额外的工作,您将不知道观察是针对绑定还是针对其他内容(例如,依赖 keyPath 通知)。一种可能的解决方法是infoForBinding:exposedBindings稍后的运行循环过程中使用performSelector:afterDelay:. (我想我只是因为提出这个建议而在嘴里吐了一点。)

依赖 KVO 系统的私有实现细节可能不是一个好方法,除非您的目标只是更好地理解 KVO 的工作原理,但听起来您实际上是在尝试完成某些事情。

真的,这整个方法就像是灾难的秘诀。这听起来像是从一开始就违反了 MVC。为什么模型对象需要知道视图对象?无论您在这里尝试完成什么,几乎肯定会通过让 nib 由 NSViewController 子类拥有更好地完成,该子类具有所有 UI 元素的 IBOutlets 和模型的属性。然后,该对象将能够更清晰地管理视图和模型对象之间明显复杂的关系,而无需运行时诡计。由于您没有详细说明这种诡计的最终目标,因此很难说最好的方法是什么。

于 2012-11-28T12:16:24.597 回答