2015-03-26 7 views
0

Я добавил следующий код в моем приложении iOS, чтобы удалить ячейку таблицы из UITableViewController, но я получаю сообщение об ошибке удаления.Удалить ячейку таблицы из UITableViewController вызывает сбой?

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    if(editingStyle == UITableViewCellEditingStyleDelete){ 
     [self.toDoItems removeObjectAtIndex:indexPath.row]; 
     NSArray *indexPaths    = @[indexPath]; 

     [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 

} 

Update: toDoItems это просто NSArray, и я попытался следующий код, но по-прежнему не работает:

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{ 
    if(editingStyle == UITableViewCellEditingStyleDelete){ 
     NSArray *indexPaths    = @[indexPath]; 

     [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationAutomatic]; 
     [self.toDoItems removeObjectAtIndex:indexPath.row]; 
    } 

} 

сообщение об ошибке здесь:

'NSInternalInconsistencyException', Причина: «Неверное обновление: недопустимое количество строк в разделе 1. Количество строк, содержащихся в существующем разделе после обновления (1003), должно быть равно количеству строк, содержащихся в этом разделе, перед обновлением (1004), плюс или минус число из строк, вставленных или удаленных из этого раздела (0 вставлено, 0 удалено) и плюс или минус количество строк, перемещенных в или из этого раздела (0 перемещен, 0 перемещен). '

Xcode 6.2 iOS6 

Я уже пробовал Deleting table cell causes crash

+0

Вы пытались переместить свой код таблицы ViewView над кодом toDoItems для удаления кода? Если ваши toDoItems связаны с основными данными, обработка приведет к обновлению таблицы перед удалением. –

+0

@Travis M см. Обновление – ssj

ответ

0

Проблема заключается в том, что вы удалите неправильный объект из модели данных:

[self.toDoItems removeObjectAtIndex:indexPath.row]; 

Это слишком простоват. В этой таблице есть несколько разделов. Вам нужна модель данных, которая отличает эти разделы, и вам необходимо удалить правильную строку из нужного раздела в вашей модели данных перед удалением соответствующей строки из таблицы. Вы не можете этого сделать, глядя только на indexPath.row; вам необходимо структурировать вашу модель данных, чтобы учесть также indexPath.section.

+0

Вот рабочий пример, демонстрирующий удаление строки из таблицы с несколькими разделами: https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/iOS7bookExamples/bk2ch08p445deleteTableRows /ch21p718sections/RootViewController.m Обратите внимание, что модель данных представляет собой массив _ массивов_ объектов данных. Таким образом, чтобы удалить правильный объект из модели, я вызываю '[self.sectionData [ip.section] removeObjectAtIndex: ip.row]' - обратите внимание, что это включает _both_ раздел и строку. – matt

Смежные вопросы