我有NSObject的子类有70个属性,我需要观察所有这些属性的变化,而不是使用以下方法逐个添加每个属性:
[self addObserver: self
forKeyPath: @"propertyname"
options: NSKeyValueObservingOptionNew
context: NULL];
。请让我知道最简单的方法。现在,我需要10.5及更高版本的解决方案。
答案 0 :(得分:10)
您可以使用objective-C运行时函数class_copyPropertyList()来获取该类的所有属性,然后遍历列表并使用property_getName()
来获取应该使用键值观察的内容。< / p>
或者您可以在相关课程上实施keyPathsForValuesAffectingValueForKey:
。在课堂上创建一个新密钥,我们只会用于变更检测。然后实现上面的方法,如果传入的字符串等于你的新键,则返回一个包含所有70个属性名称的集合。然后你可以在你的新密钥上做KVO,当有任何变化时你会收到通知。这样做,你不会知道哪个属性发生了变化,只是其中一个变了。
可能有助于告诉我们您为什么需要这样做,因为可能有更好的设计模式可供使用。