2013-08-05 14 views
5

Sto guardando uno NSArrayproperty con KVO. Ho implementato KVC come in this post e ho anche implementato la maggior parte degli accessor di array KVC. Per mutarlo, io uso mutableArrayValueForKey. Funziona bene, tranne che per 2 problemi:KVO su removeAllObjects Trigger NSKeyValueChangeRemoval per ogni articolo separatamente

  1. Quando chiamo removeAllObjects, ho un NSKeyValueChangeRemoval cambiamento per ogni singolo elemento rimosso. Vorrei ricevere solo una notifica NSKeyValueChangeRemoval con tutti gli indici rimossi al suo interno.

  2. Analogamente quando chiamo addObjectsFromArray:, ottengo NSKeyValueChangeInsertion per ogni singolo elemento aggiunto. Mi piacerebbe ricevere solo una notifica NSKeyValueChangeInsertion con tutti gli indici aggiunti.


Si noti che io faccio hanno attuato i metodi KVC remove<Key>ItemsAtIndexes: e insert<Key>Items:atIndexes:. Sono non chiamato però.

Io uso le seguenti soluzioni alternative:

- (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]; 
} 

C'è un modo di utilizzare direttamente removeAllObjects e addObjectsFromArray: senza la necessità di soluzioni precedenti?

+0

Digitare nell'ultima riga di codice? – Mundi

+0

Yepp, grazie. Corretto. – fabb

risposta

0

Come sono sicuro che si è consapevoli di non poter osservare l'array stesso, solo gli attributi di esso. Quindi penso che la tua soluzione alternativa sia inevitabile.

Detto questo, mi piace molto il modo in cui l'hai risolto!

+0

Potresti approfondire un po 'il motivo per cui pensi che sia inevitabile? Immagino che il problema derivi dall'implementazione dei metodi 'removeAllObjects' e' addObjectsFromArray: 'che aggiungono/rimuovono gli articoli uno per uno. Per essere sicuro di aver fatto la domanda, forse ho trascurato qualcosa. Quando la soluzione alternativa è inevitabile, eseguirò i metodi di soluzione metodi di categoria su 'NSArray'. – fabb

+0

Come ho detto, gli oggetti della matrice vengono osservati, non la matrice stessa. Questo spiega l'inevitabile. La categoria sembra un buon modo per andare. – Mundi

Problemi correlati