Как наблюдать изменения в свойствах NSObject - PullRequest
6 голосов
/ 15 июня 2011

У меня есть подкласс NSObject, имеющий 70 свойств, мне нужно наблюдать за изменениями во всех из них, не добавляя каждое свойство по одному, используя следующее:

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

.Пожалуйста, дайте мне знать, самый простой способ сделать это.Прямо сейчас мне нужно решение для 10.5 и позже.

1 Ответ

10 голосов
/ 15 июня 2011

Вы можете использовать функцию времени выполнения target-C class_copyPropertyList () , чтобы получить все свойства этого класса, затем выполнить цикл по списку и использовать property_getName(), чтобы получить что-то, что должно работать с наблюдением значения ключа .

Или вы можете реализовать keyPathsForValuesAffectingValueForKey: для рассматриваемого класса. Создайте новый ключ в классе, который мы будем использовать только для обнаружения изменений. Затем реализуйте описанный выше метод, и если переданная строка равна вашему новому ключу, верните набор, содержащий имена всех семидесяти свойств. Затем вы можете просто выполнить KVO на своем новом ключе, и вы получите уведомление, когда что-то изменится. Делая это таким образом, вы не будете знать, какое свойство изменилось, просто это сделал один из них.

Это может помочь нам сказать, зачем вам это нужно, так как может быть лучше использовать шаблон проектирования.

...