我正在看一个NSArray
property
with KVO
。我已经KVC
像在这篇文章中那样实现了,而且我还实现了大多数KVC
数组访问器。为了改变它,我使用mutableArrayValueForKey
. 它工作正常,除了两个问题:
当我打电话时
removeAllObjects
,我会为每个删除的项目NSKeyValueChangeRemoval
获得更改。我只想收到一个通知,其中包含所有已删除的索引。NSKeyValueChangeRemoval
同样,当我打电话时
addObjectsFromArray:
,我会得到NSKeyValueChangeInsertion
每个添加的项目。我只想收到一个NSKeyValueChangeInsertion
包含所有添加索引的通知。
请注意,我确实实现了 KVC 方法remove<Key>ItemsAtIndexes:
和insert<Key>Items:atIndexes:
. 虽然他们没有被调用。
我使用以下解决方法:
- (void)removeAllObjectsWorkaroundFromArray:(NSMutableArray *)modelArray {
NSRange indexRange;
indexRange.length = modelArray.count;
indexRange.location = 0;
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:indexRange];
[modelArray removeObjectsAtIndexes:indexSet];
}
- (void)addObjectsFromArrayWorkaroundWithArray:(NSMutableArray *)modelArray arrayToAdd:(NSArray *)arrayToAdd {
NSRange indexRange;
indexRange.length = arrayToAdd.count;
indexRange.location = modelArray.count;
NSIndexSet *indexSet = [[NSIndexSet alloc] initWithIndexesInRange:indexRange];
[modelArray insertObjects:arrayToAdd atIndexes:indexSet];
}
有没有办法直接使用removeAllObjects
而不addObjectsFromArray:
需要上述解决方法?