21

我已经在 SO 上查看了将 Key Value Observing 与NSArray(or NSMutableArray) 结合使用的示例,显然您需要使用 an NSArrayController(这与KVO我不熟悉的情况不同),但我还没有找到具体示例来说明如何执行此操作。任何人都可以用一些示例代码来解释吗?

例如,如果我有一个用ofGameModel表示其玩家姓名的 a 。我想观察这些字符串(视图控制器观察模型的数据)以更新视图中的各种内容。NSArray (playerNameArray)NSStrings

如何获得玩家名称数组已更改的通知?

编辑:iOS SDK 甚至支持NSArrayController吗?如果没有,还有其他方法吗?

4

1 回答 1

31

您不需要 NSArrayController 来观察对NSArray. 但是,您不能直接观察这些变化,即,您不能-addObserver:forKeyPath:options:context:直接调用NSArray. 在你的情况下,你想用你的钥匙来调用GameModel@"playerNameArray"

你还没有完成。正常的自动 KVO 通知只会在您调用 时启动-setPlayerNameArray:,从而替换整个数组。如果您想要更精细的通知,那么您需要在插入、删除或替换该数组中的项目时使用-willChange:valuesAtIndexes:forKey:和。-didChange:valuesAtIndexes:forKey:

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

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

于 2010-08-13T16:59:47.093 回答