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