我在SO上查看了使用NSArray
(或NSMutableArray
)使用键值观察的示例,显然您需要使用NSArrayController
(与{{1}不同我不熟悉),但我没有找到如何做到这一点的具体例子。有人可以解释一些示例代码吗?
例如,如果我有KVO
代表其GameModel
NSArray (playerNameArray)
的播放器名称。我想观察那些字符串(视图控制器观察模型的数据)来更新视图中的各种内容。
如何获得播放器名称数组已更改的通知?
编辑:iOS SDK是否支持NSStrings
?如果没有,还有另一种方式吗?
答案 0 :(得分:30)
您不需要NSArrayController来观察对NSArray
的更改。但是,您无法直接观察这些更改,即无法直接在-addObserver:forKeyPath:options:context:
上致电NSArray
。在您的情况下,您希望在GameModel
上以@"playerNameArray"
作为密钥来呼叫它。
你还没有完成。只有在调用-setPlayerNameArray:
时才会启动正常的自动KVO通知,从而替换整个阵列。如果您想要更精细的通知,那么每当您插入,删除或替换该数组中的项目时,您都需要使用-willChange:valuesAtIndexes:forKey:
和-didChange:valuesAtIndexes:forKey:
。
只要数组内容发生变化,就会发送通知。根据您在添加观察者时使用的NSKeyValueObservingOptions
,您还可以获得所做的增量更改 - 这是一个很酷的功能,但在这种情况下您可能不需要它。
注意:iOS上不存在NSArrayController。它是Cocoa Bindings的一部分,目前只存在于Mac OS X上的AppKit中。幸运的是,你不需要它。