NSMutableArray在修改时运行代码

时间:2014-08-01 21:44:08

标签: ios cocoa-touch nsmutablearray

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

1 个答案:

答案 0 :(得分:0)

最佳解决方案是使用Key-Value Observing系统观察阵列的变化。但是,使用数组执行此操作并不是直接的。

引用similar question

  

你无法直接在NSArray上调用-addObserver:forKeyPath:options:context: ...   你想在你的[对象]上用[属性名称]作为键来调用它。

     

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

     

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

使这项工作变得有用,制作一个内部使用ObservableArray的新NSArray类并不太困难,但每当更改内容时都会发布NSNotification