我有一个公开NSString
属性的自定义类。在 Interface Builder 中,我已将title
an绑定NSButton
到我的自定义类的属性。
是否可以NSButton
从我的自定义类中获取对实例的引用?
本质上,我试图在我的自定义类中找到绑定到属性的所有用户界面元素。
我有一个公开NSString
属性的自定义类。在 Interface Builder 中,我已将title
an绑定NSButton
到我的自定义类的属性。
是否可以NSButton
从我的自定义类中获取对实例的引用?
本质上,我试图在我的自定义类中找到绑定到属性的所有用户界面元素。
一般来说,这听起来像是一种反模式和/或一个坏主意。也就是说,有几件事要记住。多个观察者可以绑定到您的财产。您可以覆盖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 和模型的属性。然后,该对象将能够更清晰地管理视图和模型对象之间明显复杂的关系,而无需运行时诡计。由于您没有详细说明这种诡计的最终目标,因此很难说最好的方法是什么。