Сбой приложения при перезагрузке tableView с новыми данными - PullRequest
0 голосов
/ 21 июля 2010

У меня есть представление, содержащее segmentedControl и tableView. TableView заполняется в зависимости от выбранного элемента segmentedControl (в данном случае это еда и вино). Данные для tableView генерируются из coreData.

Отлично работает при запуске приложения, в котором выбран любой из сегментированных элементов управления (еда или вино), и отображает правильные данные. Но как только я пытаюсь выбрать другой элемент, приложение вылетает со словами «Программа получила сигнал:« EXC_BAD_ACCESS ».». К сожалению, отладчик не дает мне никакой разборчивой информации, чтобы знать, где происходит исключение, поэтому я вставил точки останова, и, кажется, это происходит в

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

MenuSubsections* menuSubsection = [self.menuSubsections objectAtIndex:section];
if (![menuSubsection menuItems]) {
    return 0;
}

return [[menuSubsection menuItems] count];
}

в последней строке.

Я вставил NSLog для menuSubsection, и он говорит, среди прочего, что это правильно,

menuItems = "<relationship fault: 0x8133540 'menuItems'>";

Но оно также выдает то же сообщение при запуске и работает нормально ...

Есть идеи?

Спасибо
Miguel

1 Ответ

0 голосов
/ 25 июля 2010

Похоже, что в действительности две логические таблицы отображаются в одной таблице.Когда вы выбираете один сегментированный элемент управления или другой, вы заменяете сущности Food или Wine, отображаемые в таблице.

Это нормально, но у каждой сущности будет своя собственная структура данных, которая определяет ее собственную версию таблицы, и вы должны убедиться, что вы возвращаете правильное количество разделов и строк для текущей выбранной сущности.Маловероятно, что количество сущностей Food точно такое же, как у сущностей Wine

Похоже, ваш класс MenuSubsections возвращает только количество строк для раздела для одной из сущностей.Когда вы переключаетесь на другую сущность, она продолжает возвращать количество строк для первой сущности, которая заставляет таблицу обращаться к объектам для несуществующих строк, что вызывает сбой.

Вашему методу numberOfRowsInSection: требуется дополнительный уровень логики, чтобы он проверял значение сегментированного элемента управления и затем возвращал право MenuSubsections для Food или Wine.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...