如何观察NSObject属性的变化

时间:2011-06-15 07:22:26

标签: cocoa properties key-value-observing nsobject

我有NSObject的子类有70个属性,我需要观察所有这些属性的变化,而不是使用以下方法逐个添加每个属性:

[self addObserver: self
       forKeyPath: @"propertyname"
          options: NSKeyValueObservingOptionNew
          context: NULL];

。请让我知道最简单的方法。现在,我需要10.5及更高版本的解决方案。

1 个答案:

答案 0 :(得分:10)

您可以使用objective-C运行时函数class_copyPropertyList()来获取该类的所有属性,然后遍历列表并使用property_getName()来获取应该使用键值观察的内容。< / p>

或者您可以在相关课程上实施keyPathsForValuesAffectingValueForKey:。在课堂上创建一个新密钥,我们只会用于变更检测。然后实现上面的方法,如果传入的字符串等于你的新键,则返回一个包含所有70个属性名称的集合。然后你可以在你的新密钥上做KVO,当有任何变化时你会收到通知。这样做,你不会知道哪个属性发生了变化,只是其中一个变了。

可能有助于告诉我们您为什么需要这样做,因为可能有更好的设计模式可供使用。