¿Qué debo hacer para actualizar un tableView vinculado a un NSArrayController cuando se llama a un método que actualiza la matriz subyacente? Un ejemplo podría aclarar esto.NSArrayController y KVO
Cuando se inicia mi aplicación, crea un SubwayTrain. Cuando SubwayTrain se inicializa, crea un solo SubwayCar. SubwayCar tiene una matriz mutable 'pasajeros'. Cuando se inicializa un vagón de metro, se crea el conjunto de pasajeros y se colocan un par de objetos People (digamos una persona con el nombre "ticket collector" y otro, llamado "vagabundo"). Estos tipos siempre están en el SubwayCar, así que los creo en la inicialización y los agrego al conjunto de pasajeros.
Durante la vida de la aplicación, las personas abordan el automóvil. 'addPassenger' se llama en el SubwayCar, con la persona que se pasa como un argumento.
Tengo un NSArrayController vinculado a subwayTrain.subwayCar.passengers, y en el momento de mi lanzamiento mi colector de boletos y el vagabundo aparecen bien. Pero cuando uso [subwayCar addPassenger:], tableView no se actualiza. He confirmado que el pasajero definitivamente se agrega a la matriz, pero nada se actualiza en la GUI.
¿Qué es probable que esté haciendo mal? Mi instinto es que está relacionado con KVO: el controlador de array no sabe actualizarse cuando se llama a addPassenger (aunque addPassenger llama [pasajeros addObject:]. ¿Qué podría estar equivocando aquí? - Puedo publicar código si ayuda.
Gracias a cualquiera que esté dispuesto a ayudar.
ACTUALIZACIÓN
Así, resulta que puedo conseguir que esto funcione, cambiando por el método de addPassenger
[seatedPlayers addObject:person];
a
NSMutableSet *newSeatedPlayers = [NSMutableSet setWithSet:seatedPlayers];
[newSeatedPlayers addObject:sp];
[seatedPlayers release];
[self setSeatedPlayers:newSeatedPlayers];
Supongo que esto se debe a que estoy usando [self setSeatedPlayers]. ¿Esta es la manera correcta de hacerlo? Parece terriblemente engorroso copiar la matriz, liberar la anterior y actualizar la copia (en lugar de solo agregarla a la matriz existente).
¿Cómo se relaciona la vista de tabla con el controlador? ¿Tiene cada columna de la tabla vinculada a una propiedad de 'subwayTrain.subwayCar.passengers' (por ejemplo, columna Nombre vinculado a' subwayTrain.subwayCar.passengers.name')? – outis
sí exactamente. Y los nombres de los pasajeros aparecen cuando se lanza. –