Oglądam NSArray
property
z KVO
. Zaimplementowałem KVC
, podobnie jak w this post, a także zaimplementowałem większość akcesorów do tablic KVC
. Aby zmutować, używam mutableArrayValueForKey
. To działa dobrze, z wyjątkiem 2 kwestie:KVO na removeAllObjects Wyzwala NSKeyValueChangeRemoval dla każdego elementu oddzielnie
Kiedy zadzwonić
removeAllObjects
, dostajęNSKeyValueChangeRemoval
zmianę dla każdego pojedynczego usuniętego elementu. Chcę otrzymać tylko jedno powiadomienieNSKeyValueChangeRemoval
ze wszystkimi usuniętymi indeksami.Podobnie, gdy zadzwonię pod numer
addObjectsFromArray:
, otrzymamNSKeyValueChangeInsertion
za każdy dodany element. Chciałbym otrzymać tylko jedno powiadomienieNSKeyValueChangeInsertion
ze wszystkimi dodanymi indeksami.
Uwaga, zrobić wdrożyły metody KVC remove<Key>ItemsAtIndexes:
i insert<Key>Items:atIndexes:
. Są one jednak nazwane , a nie.
używam następujące rozwiązania:
- (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];
}
Czy istnieje sposób, aby bezpośrednio wykorzystać removeAllObjects
i addObjectsFromArray:
bez potrzeby powyższych obejścia?
Literówka w ostatnim wierszu kodu? – Mundi
Yepp, dzięki. Poprawione. – fabb