对于我的@property
,我可以让一个setter在修改该属性时做一些额外的工作,但是使用NSMutableArray我经常使用诸如[NSMutableArray replaceObjectAtIndex:(NSInteger) withObject:(id)];
之类的方法来修改数组。如何在NSMutableArray中替换/插入对象时编写将被调用的方法?
答案 0 :(得分:0)
最佳解决方案是使用Key-Value Observing系统观察阵列的变化。但是,使用数组执行此操作并不是直接的。
你无法直接在NSArray上调用
-addObserver:forKeyPath:options:context:
... 你想在你的[对象]上用[属性名称]作为键来调用它。你还没有完成。正常的自动KVO通知 只有在你拨打
-setPlayerNameArray:
时才会启动,从而取代 整个阵列。如果您想要更精细的通知,那么您 需要使用-willChange:valuesAtIndexes:forKey:
和 无论何时插入,删除或替换该数组中的项目,都会-didChange:valuesAtIndexes:forKey:
。这将在数组内容发送通知 变化。取决于您在何时使用的NSKeyValueObservingOptions 添加您的观察者,您还可以获得增量更改 是一个很酷的功能,但在这种情况下你可能不需要它。
使这项工作变得有用,制作一个内部使用ObservableArray
的新NSArray
类并不太困难,但每当更改内容时都会发布NSNotification
。