我正在观看NSArray
property
和KVO
。我已经实现了类似于本文中的KVC
,并且我还实现了大多数KVC
数组访问器。为了使其发生变异,我使用mutableArrayValueForKey
。它运行良好,除了2个问题:
-
当我调用
removeAllObjects
时,我会为每个删除的项目得到一个NSKeyValueChangeRemoval
更改。我只想收到一个NSKeyValueChangeRemoval
通知,其中包含所有已删除的索引。 -
类似地,当我调用
addObjectsFromArray:
时,我为每个添加的项目获得NSKeyValueChangeInsertion
。我只想收到一个NSKeyValueChangeInsertion
通知,其中包含所有添加的索引。
请注意,Ido已经实现了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:
而不需要上述解决方案
我相信你已经知道,不能观察数组本身,只能观察它的属性。所以我认为你的解决方法是不可避免的。
话虽如此,我真的很喜欢你解决这个问题的方式!