{tableView reloadData} вызывает сбой приложения после удаления раздела - PullRequest
0 голосов
/ 08 июня 2011

Я определил настраиваемое представление заголовка программно в методе: ViewForHeaderInSection Внутри настраиваемого представления находится кнопка UIB с целевым действием method:"foodDeleteButtonPressed".Я также устанавливаю переменную тега кнопки для номера раздела.

Вот реализация этого метода

-(void)foodDeleteButtonPressed:(id)sender
{
NSInteger index = [sender tag];
NSLog(@"Delete button pressed for section: %d", index);

FoodItem *tmpItem = [Cart.foodItemsArray objectAtIndex:index];

int ct = [tmpItem.sidesArray count];
if(ct > 0)
   {
    NSLog(@"About to delete %d sides", ct);
    [tmpItem.sidesArray removeAllObjects];
   }
else 
   {
    NSLog(@"The fooditem to be deleted has no side items");
   }

NSLog(@"About to remove object from ffod items array");

[Cart.foodItemsArray removeObjectAtIndex:index];
[self.myOrderTable reloadData];


}

Этот метод выполняется без строки: [self.myOrderTable reloadData];

В тот момент, когда я пытаюсь обновить свое представление после удаления разделов, пытаясь перезагрузить данные.Мое приложение аварийно завершает работу со следующей трассировкой стека:

* Завершение работы приложения из-за необработанного исключения 'NSRangeException', причина: '* - [NSMutableArray objectAtIndex:]: индекс 1 вне границ[0 .. 0] '
*** Стек вызовов при первом броске:
(
CoreFoundation 0x010325a9 __exceptionPreprocess + 185
libobjc.A.dylib 0x01186313 objc_exception_throw + 44
CoreFoundation 0x010280a5 - CoreFoundation 0x010280a5 -__NSArrayM objectAtIndex:] + 261 * +1021 * ресторан 0x00015c77 - [MyOrderViewController Tableview: viewForHeaderInSection:] + 827 * тысяча двадцать-дв * UIKit 0x0038de48 - [UITableView (UITableViewInternal) _delegateWantsHeaderForSection:] + 152
UIKit 0x004d8c01 - [UISectionRowData refreshWithSection: Tableview: tableViewRowData:] + 116
UIKit 0x004d6d88 - [UITableViewRowDatanumberOfRows] + 108
UIKit 0x0038a677 - [UITableViewnoteNumberOfRowsChanged] + 132
UIKit 0x00397708 - загруженный юзер444
UIKit 0x0031c4fd - [UIApplicationsendAction: to: from: forEvent:] + 119
UIKit 0x003ac799 - [UIControlsendAction: to: forEvent:] + 67
UIKit 0x003aec2b - [UIControl для внутреннего использования:]

Данные перезагрузки выдают исключение.Как это исправить?Мы ценим любые предложения.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2015

!!![Cart.foodItemsArray removeObjectAtIndex: index];!!!

Возможно, это произошло при попытке удалить несуществующий индекс

0 голосов
/ 10 июня 2015

Проверьте, если

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat

или

func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat

Вернуть правильное значение (может быть NAN)

0 голосов
/ 09 июня 2011

Когда вы удалили объект, вы уменьшили количество элементов, о которых ваш делегат сообщает, что таблицы существуют в таблице?

Эта строка:

Ресторан 0x00015c77 - [MyOrderViewController tableView: viewForHeaderInSection:] + 827

выполняет objectAtIndex для массива, вероятно, того, из которого вы только что удалили запись.Я предполагаю, что он запрашивает еще один элемент массива, чем существует.

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