iphone - 使用 NSArray 观察键值

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

我在 SO 上查看了使用 NSArray(或 NSMutableArray)进行键值观察的示例,显然您需要使用 NSArrayController(与 KVO 不同,我不熟悉),但我还没有找到如何执行此操作的具体示例。谁能用一些示例代码解释一下?

例如,如果我有一个 GameModel,它用 NSStringsNSArray (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/

相关文章:

ios - 加载 Viewcontroller 的新部分

ios - 如何在 Swift 中使用 plist 中的值而不将它们作为 AnyObject 出现?

ios - 如何快速交换 NSArray 元素

iphone - 将消息发送到 objectForKey 到 NSMutableArray 实例,并且有效!!奇怪的?

iphone - 将本地sqlite数据库移动到远程服务器ios 5

iOS Admob Interstitial 广告卡住并变得无响应

ios - 为什么UIViewController中有一个navigationItem?

ios - 使用 Swift 在另一个 ViewController 上声明 UIViewController 变量属性

objective-c - NSArray enmuerateUsingBlock,一个在另一个里面,如何停止外部枚举?

iphone - 可以在我的框架中包含其他框架或库吗?