5

我正在看一个NSArray propertywith KVO。我已经KVC像在这篇文章中那样实现了,而且我还实现了大多数KVC数组访问器。为了改变它,我使用mutableArrayValueForKey. 它工作正常,除了两个问题:

  1. 当我打电话时removeAllObjects,我会为每个删除的项目NSKeyValueChangeRemoval获得更改。我只想收到一个通知,其中包含所有已删除的索引。NSKeyValueChangeRemoval

  2. 同样,当我打电话时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:需要上述解决方法?

4

1 回答 1

0

我相信你知道人们无法观察数组本身,只能观察它的属性。所以我认为你的解决方法是不可避免的。

话虽这么说 - 我真的很喜欢你解决这个问题的方式!

于 2013-08-06T06:08:37.010 回答