Что нужно сделать, чтобы обновить tableView, привязанный к NSArrayController при вызове метода, который обновляет базовый массив? Пример может прояснить это.NSArrayController и KVO
Когда мое приложение запускается, оно создает SubwayTrain. Когда SubwayTrain инициализируется, он создает один SubwayCar. SubwayCar имеет изменчивый массив «пассажиров». Когда автомобиль Subway инициализируется, создается массив пассажиров, и в него добавляется несколько объектов People (скажем, человек с именем «collector»), а другой - «бездомный». Эти ребята всегда на SubwayCar, поэтому я создаю их при инициализации и добавляю их в массив пассажиров.
В течение срока действия приложения люди садятся в машину. 'addPassenger' вызывается в SubwayCar, причем человек передается в качестве аргумента.
У меня есть NSArrayController, связанный с subwayTrain.subwayCar.passengers, и при запуске мой коллекционер билетов и бездомный парень выглядят хорошо. Но когда я использую [subwayCar addPassenger:], tableView не обновляется. Я подтвердил, что пассажир определенно добавлен в массив, но ничего не обновляется в gui.
Что я могу делать неправильно? Мой инстинкт заключается в том, что он связан с KVO - контроллер массива не знает, что нужно обновлять при вызове addPassenger (хотя addPassenger вызывает [passengers addObject:]. Что я могу ошибаться здесь? Я могу отправить код, если это поможет.
Благодаря тех, кто готов помочь.
UPDATE
Таким образом, получается, что я могу получить эту работу, изменив методом addPassenger из
[seatedPlayers addObject:person];
в
NSMutableSet *newSeatedPlayers = [NSMutableSet setWithSet:seatedPlayers];
[newSeatedPlayers addObject:sp];
[seatedPlayers release];
[self setSeatedPlayers:newSeatedPlayers];
Я думаю, что это потому, что я использую [self setSeatedPlayers]. Правильно ли это? Кажется ужасно громоздким, чтобы скопировать массив, выпустить старый и обновить копию (в отличие от просто добавления существующего массива).
Как вид таблицы связан с контроллером? У вас есть столбец таблицы, привязанный к свойству 'subwayTrain.subwayCar.passengers' (например, имя столбца привязано к' subwayTrain.subwayCar.passengers.name')? – outis
yep точно. И имена пассажиров появляются, когда они запускаются. –