我在 SO 上查看了使用 NSArray
(或 NSMutableArray
)进行键值观察的示例,显然您需要使用 NSArrayController
(与 KVO
不同,我不熟悉),但我还没有找到如何执行此操作的具体示例。谁能用一些示例代码解释一下?
例如,如果我有一个 GameModel
,它用 NSStrings
的 NSArray (playerNameArray)
表示其玩家名称。我想观察那些字符串( View Controller 观察模型的数据)以更新 View 中的各种内容。
我如何收到玩家名称数组已更改的通知?
编辑:iOS SDK 是否支持 NSArrayController
?如果不行,还有别的办法吗?
最佳答案
您不需要 NSArrayController 来观察对 NSArray
的更改。然而,您无法直接观察到这些变化,即您无法直接在 NSArray
上调用 -addObserver:forKeyPath:options:context:
。在您的情况下,您希望使用 @"playerNameArray"
作为键在您的 GameModel
上调用它。
不过你还没有完成。正常的自动 KVO 通知只会在您调用 -setPlayerNameArray:
时启动,从而替换整个数组。如果您想要更细化的通知,则需要在插入、删除或替换项目时使用 -willChange:valuesAtIndexes:forKey:
和 -didChange:valuesAtIndexes:forKey:
在那个数组中。
每当数组的内容发生变化时,这将发送通知。根据您在添加观察者时使用的 NSKeyValueObservingOptions
,您还可以获得所做的增量更改——这是一个很酷的功能,但在这种情况下您可能不需要它。
注意:iOS 上不存在 NSArrayController。它是 Cocoa Bindings 的一部分,目前仅存在于 Mac OS X 上的 AppKit 中。幸运的是,您不需要它。
关于iphone - 使用 NSArray 观察键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478451/