Co należy zrobić, aby zaktualizować tableView powiązane z NSArrayController, gdy wywoływana jest metoda, która aktualizuje bazową tablicę? Przykład może to wyjaśnić.NSArrayController i KVO
Po uruchomieniu aplikacji tworzy ona SubwayTrain. Po zainicjowaniu SubwayTrain tworzy pojedynczy SubwayCar. SubwayCar ma zmienną tablicę "pasażerów". Po zainicjowaniu samochodu metra, tworzy się tablica pasażerów i umieszcza się w niej kilka obiektów People (powiedzmy osobę o nazwie "kolekcjoner biletów" i inną, o nazwie "bezdomny facet"). Ci faceci są zawsze na SubwayCar, więc tworzę je podczas inicjalizacji i dodam do tablicy pasażerów.
Podczas życia aplikacji ludzie wsiadają do samochodu. "addPassenger" jest wywoływany w SubwayCar, a osoba przekazana jako argument.
Mam NSArrayController związany z metremTrain.subwayCar.passengers, a przy uruchomieniu mój kolekcjoner biletów i bezdomny facet pojawiają się dobrze. Ale kiedy używam [subwayCar addPassenger:], tableView nie aktualizuje się. Potwierdziłem, że pasażer jest zdecydowanie dodany do tablicy, ale nic nie jest aktualizowane w gui.
Co mogę zrobić źle? Mój instynkt jest taki, że jest związany z KVO - kontroler tablicy nie wie, aby zaktualizować, gdy zostanie wywołany addPassenger (nawet jeśli addPassenger wywołuje [passengers addObject:] .Co mogę się tu dostać źle - mogę opublikować kod, jeśli to pomaga
Dzięki wszystkich chętnych do pomocy.
UPDATE
więc okazuje się, mogę uzyskać to do pracy poprzez zmianę metodą addPassenger z
[seatedPlayers addObject:person];
do
NSMutableSet *newSeatedPlayers = [NSMutableSet setWithSet:seatedPlayers];
[newSeatedPlayers addObject:sp];
[seatedPlayers release];
[self setSeatedPlayers:newSeatedPlayers];
Domyślam się, że to dlatego, że używam [self setSeatedPlayers]. Czy to właściwy sposób? Wydaje się bardzo kłopotliwe, aby skopiować tablicę, zwolnić starą i zaktualizować kopię (w przeciwieństwie do dodawania do istniejącej tablicy).
W jaki sposób widok tabeli jest powiązany z kontrolerem? Czy każda kolumna tabeli jest powiązana z właściwością 'subwayTrain.subwayCar.passengers' (np. Nazwa kolumny powiązana z' subwayTrain.subwayCar.passengers.name')? – outis
tak dokładnie. A nazwiska pasażerów pojawiają się po uruchomieniu. –