使用NSArray观察关键值

can*_*boy 21 iphone objective-c key-value-observing nsarray nsarraycontroller

我已经在SO上查看了使用键值观察的示例NSArray(或者NSMutableArray),显然你需要使用NSArrayController(不像KVO我不熟悉的),但我没有找到如何执行此操作的具体示例.有人可以解释一些示例代码吗?

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

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

编辑:iOS SDK甚至支持NSArrayController吗?如果没有,还有另一种方式吗?

kpe*_*yua 31

您不需要NSArrayController来观察对的更改NSArray.但是你不能直接观察这些变化,也就是说,你不能-addObserver:forKeyPath:options:context:直接打电话给NSArray.你的情况,你怎么称呼它在你GameModel@"playerNameArray"的关键.

你还没有完成.正常的自动KVO通知只有在您调用时才会启动-setPlayerNameArray:,从而替换整个阵列.如果你想更精细的通知,那么你需要使用-willChange:valuesAtIndexes:forKey:-didChange:valuesAtIndexes:forKey:每次插入,删除或替换物品阵列英寸

这将在数​​组内容发生更改时发送通知.根据NSKeyValueObservingOptions您在添加观察者时的使用情况,您还可以获得所做的增量更改 - 这是一个很酷的功能,但在这种情况下您可能不需要它.

注意:iOS上不存在NSArrayController.它是Cocoa Bindings的一部分,目前只存在于Mac OS X上的AppKit中.幸运的是,你不需要它.

  • @Adam他说的是你必须为NSMutableArray编写自己的访问器并自己激活KVO注释. (4认同)