5

で を見てNSArray propertyKVOます。この投稿KVCのように実装し、配列アクセサーのほとんども実装しました。それを変異させるために、私は. 2 つの問題を除いて、正常に動作します。KVCmutableArrayValueForKey

  1. を呼び出すと、削除されたアイテムごとに変更がremoveAllObjects得られます。削除されたすべてのインデックスを含む通知を1 つだけ受け取りたいです。NSKeyValueChangeRemovalNSKeyValueChangeRemoval

  2. 同様に、 を呼び出すと、追加されたアイテムごとaddObjectsFromArray:に取得されます。追加されたすべてのインデックスを含む通知をNSKeyValueChangeInsertion1 つだけ受け取りたいです。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