КВО: наблюдаем глобальный NSNumber - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть статическое глобальное значение NSNumber, и мне нужно его соблюдать. Если бы он был членом какого-то объекта, у меня не было бы проблем вообще. Но что мне делать с глобальным охватом? Я думаю, я мог бы использовать

[globalVar addObserver:self forKeyPath:**integerValue** options:... ]

но это кажется уродливым, потому что я мог бы также использовать "intValue" KeyPath и мне нужно наблюдать NSNumber, а не его часть int, даже если это единственная его часть, которую я сейчас использую. Делать эту конкретную переменную частью некоторого класса не кажется «правильным». Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Простой ответ: вы не можете.Наблюдение - это программный механизм, который в основном включает в себя вызовы методов , создание хранилища (т. Е. Машинной инструкции) в глобальной переменной не обеспечивает возможности для подвешивания механизма.

Наилучшим вариантом являетсяпереосмыслите свой дизайн.Подумайте о том, чтобы сохранить значение в одноэлементном классе и получить к нему доступ / наблюдать за ним.

Трудный ответ: напишите свою собственную изменчивую версию NSNumber (пример неизменный) и пусть этот класс реализует протокол наблюдения значения ключа (этот класс может быть просто оболочкой с переменной экземпляра NSNumber).Теперь сохраните экземпляр этого класса в вашей глобальной переменной и добавьте в него любых наблюдателей, которые вам нравятся.

0 голосов
/ 19 марта 2012

CRD верно: «В KVO наблюдается только свойство, а не значение». Обычно словари или пользовательские объекты - это KVO, но не сами листья (значения) (числа, строки).Столкнувшись с подобной проблемой, я наконец расширил класс NSNumber, сделав его KVO-совместимым .Теперь, если вы ищете разные подходы для получения уведомлений в своем приложении, я настоятельно рекомендую прочитать эту статью .

0 голосов
/ 13 декабря 2011

Обычный способ сделать это - сделать его доступным для некоторого глобально доступного объекта, такого как NSApp или его делегат.

...