Ios removeAllObjects上的KVO分别触发每个项的NSKeyValueChangeRemove
我正在用Ios removeAllObjects上的KVO分别触发每个项的NSKeyValueChangeRemove,ios,key-value-observing,kvc,Ios,Key Value Observing,Kvc,我正在用KVO观看NSArray属性。我在中实现了KVC,并且还实现了大多数KVC阵列访问器。要对其进行变异,我使用mutableArrayValueForKey。它工作正常,但有两个问题除外: 当我调用removeAllObjects时,我会得到一个nskeyvaluechangeremovementchange用于每个被删除的项目。我只希望收到一个nsKeyValueChangeRemoving通知,其中包含所有已删除的索引 类似地,当我调用addObjectsFromArray:时,我会为
KVO
观看NSArray
属性
。我在中实现了KVC
,并且还实现了大多数KVC
阵列访问器。要对其进行变异,我使用mutableArrayValueForKey
。它工作正常,但有两个问题除外:
removeAllObjects
时,我会得到一个nskeyvaluechangeremovement
change用于每个被删除的项目。我只希望收到一个nsKeyValueChangeRemoving
通知,其中包含所有已删除的索引addObjectsFromArray:
时,我会为每个添加的项获取NSKeyValueChangeInsertion
。我只希望收到一个nskeyvaluechangeinertion
通知,其中包含所有添加的索引注意,我确实实现了KVC方法
removitemsatindexes:
和insertItems: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:
而不需要上述解决方法?我相信您知道,人们无法观察数组本身,只能观察数组的属性。所以我认为你的解决办法是不可避免的
话虽如此,我真的很喜欢你解决这个问题的方式 最后一行代码有错吗?是的,谢谢。更正。你能详细解释一下为什么你认为这是不可避免的吗?我猜问题源于方法
removeAllObjects
和addObjectsFromArray:
的实现,它们逐个添加/删除项。当然我问了这个问题,也许我忽略了什么。当变通方法不可避免时,我会将变通方法分类为NSArray
上的方法。正如我所说,数组的对象是观察到的,而不是数组本身。这就解释了不可避免的问题。分类似乎是一个好办法。