【问题标题】:KVO and NSMutableArrayKVO 和 NSMutableArray
【发布时间】:2023-03-19 03:41:02
【问题描述】:

如何使用NSMutableArray 设置 KVO(键值观察)?

我希望在数组中出现更改时收到通知。我以前从未将 KVO 用于数组之类的集合。

【问题讨论】:

    标签: objective-c cocoa key-value-observing


    【解决方案1】:

    我想你会对this question 的答案感兴趣。

    关键是你不能直接观察数组上的任何属性——数组只是存储——但是你可以观察到由该数组支持的多对多关系(这里我' m 假设您的数组是某处对象的属性)。

    如果你不想到处使用那些特殊的访问器,你拥有数组的代码可以调用

    -willChange:valuesAtIndexes:forKey:

    -didChange:valuesAtIndexes:forKey:

    this answer 中所述。

    如果您使用的是 Mac 而不是 iOS,则应考虑使用NSArrayController

    【讨论】:

      【解决方案2】:

      您可以使用KVOMutableArray。 它是 NSMutableArray 的子类,支持 KVO。

      免责声明:我是作者 :)

      【讨论】:

      • 对不起,我真的不想投反对票——但我质疑链接库的质量。充其量,它可以被描述为一个可观察的容器实现。它不是符合 KVO 的 NSMutableArray。 @JoeOsborn 在另一个答案中描述了这是对 KVO 概念的误解:KVO 需要一个可观察的 key,它可用于通过对象层次结构形成 key paths。 Cocoa 无法使用键来处理集合对象本身。
      • @NikolaiRuhe 是的,它是一个可观察的容器实现,而容器恰好是 NSMutableArray 的子类。最初的问题要求一种方法来监视数组的变化。它确实提供了一种方法。它确实使用了一个可观察的键,即“observer.arr”。我相信我们是一致的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2011-09-27
      • 1970-01-01
      相关资源
      最近更新 更多