【问题标题】:NSMutableArray run code on modificationNSMutableArray 在修改时运行代码
【发布时间】:2014-08-01 21:44:08
【问题描述】:

对于我的@propertys,我可以在修改该属性时创建一个 setter 来做一些额外的工作,但是对于 NSMutableArray,我经常使用诸如 [NSMutableArray replaceObjectAtIndex:(NSInteger) withObject:(id)]; 之类的方法来修改数组。如何编写一个在 NSMutableArray 中替换/插入对象时调用的方法?

【问题讨论】:

标签: ios cocoa-touch nsmutablearray


【解决方案1】:

最好的解决方案是使用 Key-Value Observing 系统来观察数组的变化。然而,用数组来做这件事并不完全直截了当。

引用similar question:

您不能直接在 NSArray 上调用 -addObserver:forKeyPath:options:context:... 你想在你的 [object] 上以 [the property name] 作为键调用它。

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

这将在数组的内容发生时发送通知 变化。取决于您在何时使用的 NSKeyValueObservingOptions 添加您的观察者,您还可以获得增量更改 是一个很酷的功能,但在这种情况下你可能不需要它。

为了让这对你有用,创建一个新的ObservableArray 类在内部使用NSArray 并在发生更改时发布NSNotifications 并不难。

【讨论】:

  • 所以在那段引文中,他们的意思是每次进行更改时都必须手动调用它们?为什么 NSMutableArray 方法还没有发布这些?
  • KVO 是在第一个 NSArray 类之后添加到语言中的,它是一个非常核心的类(即性能非常重要),所以没有添加它是有道理的。如果没有一个开源项目提供类似于我提到的第二个选项的可观察数组类,我会感到惊讶。
  • 就我的目的而言,这绝对是多余的(我只编写了一个 setter 方法来完成这项工作,因为我只需要以一种方式更改数组。)但这是一个非常有用的答案我问的问题。
猜你喜欢
  • 2018-11-20
  • 2015-07-13
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2011-02-15
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多