Cosa devo fare per aggiornare un oggetto TableView associato a un NSArrayController quando viene chiamato un metodo che aggiorna l'array sottostante? Un esempio potrebbe chiarire questo.NSArrayController e KVO
All'avvio dell'applicazione, viene creato un SubwayTrain. Quando SubwayTrain viene inizializzato, crea una singola SubwayCar. SubwayCar ha un "passeggeri" di array mutevole. Quando viene inizializzata una macchina della metropolitana, viene creata la matrice passeggeri e vengono inseriti un paio di oggetti People (diciamo una persona con il nome "raccoglitore di biglietti" e un'altra, chiamata "ragazzo senza casa"). Questi ragazzi sono sempre sulla SubwayCar quindi li creo all'inizializzazione e li aggiungo alla schiera dei passeggeri.
Durante la vita dell'applicazione, i passeggeri salgono a bordo dell'auto. 'addPassenger' viene chiamato sulla SubwayCar, con la persona passata come argomento.
Ho un NSArrayController legato a subwayTrain.subwayCar.passengers e al momento del lancio il mio collezionista di biglietti e il senzatetto si presentano bene. Ma quando uso [subwayCar aggiungere Passenger:], il TableView non si aggiorna. Ho confermato che il passeggero è definitivamente aggiunto alla matrice, ma nulla viene aggiornato nella GUI.
Che cosa potrei fare di sbagliato? Il mio istinto è che è collegato a KVO - il controller di array non si sa aggiornare quando si chiama addPassenger (anche se le chiamate addPassenger [addOggetto passeggeri:] .Che potrei sbagliare qui - Posso inserire il codice se aiuta
Grazie a chiunque abbia voglia di dare una mano.
UPDATE
Così, si scopre che posso arrivare a questo lavoro, modificando il metodo addPassenger da
[seatedPlayers addObject:person];
a
NSMutableSet *newSeatedPlayers = [NSMutableSet setWithSet:seatedPlayers];
[newSeatedPlayers addObject:sp];
[seatedPlayers release];
[self setSeatedPlayers:newSeatedPlayers];
Immagino che questo sia dovuto al fatto che sto usando [auto setSeatedPlayers]. È questo il modo giusto per farlo? Sembra terribilmente complicato copiare l'array, rilasciare quello vecchio e aggiornare la copia (invece di aggiungere semplicemente all'array esistente).
In che modo la vista tabella è vincolata al controller? Avete ciascuna colonna di tabella associata a una proprietà di 'subwayTrain.subwayCar.passengers' (ad esempio, nome colonna vincolato a' subwayTrain.subwayCar.passengers.name')? – outis
sì esatto. E i nomi dei passeggeri si presentano quando si lancia. –