我有静态全局NSNumber值,我需要观察它。如果它是某个对象的成员,我就没有任何问题。但是我如何处理全球范围?我猜我可以用
[globalVar addObserver:self forKeyPath:**integerValue** options:... ]
但这看起来很丑,因为我不妨使用“intValue”KeyPath,我需要观察NSNumber,而不是它的int部分,即使它是我现在使用它的唯一部分。将这个特定变量作为某个类的一部分似乎并不是一个“正确”的想法。谢谢!
答案 0 :(得分:2)
简单回答:你做不到。 Observing是一种软件机制,它从根本上涉及方法调用,将存储(即机器指令)作为全局变量提供无挂钩来挂起机制。
最好的选择是重新考虑你的设计。考虑将值存储在单例类中并在那里访问/观察它。
硬答案:编写自己的可变版本的NSNumber
(其中一个实例是 immutable )并让此类实现键值观察协议(这个类可能只是一个带有NSNumber实例变量的包装器)。现在将此类的实例和实例存储在全局变量中,并添加您喜欢的任何观察者。
答案 1 :(得分:0)
执行此类操作的常用方法是使其成为可从某些全局可用对象(例如NSApp或其委托)访问的值。
答案 2 :(得分:0)
CRD是对的,“在KVO中只观察属性,而不是值”通常字典或自定义对象是KVO而不是叶子(值)本身(数字,字符串)。面对类似的问题,我终于扩展了NSNumber类,使其成为KVO compliant。 现在,如果您正在寻找在您的应用中实现通知的不同方法,我强烈建议您阅读this article。