使用NSArray观察关键值

时间:2010-08-13 15:39:47

标签: iphone objective-c nsarray key-value-observing nsarraycontroller

我在SO上查看了使用NSArray(或NSMutableArray)使用键值观察的示例,显然您需要使用NSArrayController(与{{1}不同我不熟悉),但我没有找到如何做到这一点的具体例子。有人可以解释一些示例代码吗?

例如,如果我有KVO代表其GameModel NSArray (playerNameArray)的播放器名称。我想观察那些字符串(视图控制器观察模型的数据)来更新视图中的各种内容。

如何获得播放器名称数组已更改的通知?

编辑:iOS SDK是否支持NSStrings?如果没有,还有另一种方式吗?

1 个答案:

答案 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中。幸运的是,你不需要它。