2013-02-22 5 views
1

Может кто-то один предположить, что это проблема в моем коде .....как удалить ячейки в виде таблицы

self.modleClass.foldersAray один объект и TableView есть одна секция и одна строка

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

{ 

    if (editingStyle == UITableViewCellEditingStyleDelete) { 

     // Delete the row from the data source 
     [self.tableview setEditing:YES animated:YES]; 

     [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row]; 

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YEs]; 

     [tableView reloadData]; 
    } 
} 

Я получаю ошибку, как показано ниже.

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).' 

ответ

0

Эта ошибка означает, что вы должны обновить вас (источник данных массив данных, словарь или что вы используете)

Например: Вы имеете 5 клеток, прежде чем удалить, и 5 объектов в DataArray. Перед вызовом deleteRowsAtIndexPaths: мы должны удалить объект из dataArray, связанный с этой ячейкой, и только затем вызвать deleteRowsAtIndexPaths:. Также вместо этого используйте [tableView reloadData], используйте

[tableView beginUpdates]; 
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
[tableView endUpdates]; 

P.S. Я вижу, что вы удалите объект из источника данных, так тщательно проверить его, может быть, вы пропустите что-то

2

Делай так,

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

     if (editingStyle == UITableViewCellEditingStyleDelete) { 

      [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row]; 

      [tableView reloadData]; 
     } 
} 

больше достаточно .........

+0

Мне нравится, но ячейка не удалена ... она отображает такое же состояние, когда я нажал кнопку редактирования ... – user1997077

2

Если ваш tableView основан на foldersAray, то удаление объекта из этого массива и перезагрузка представления таблицы приведет к удалению этой ячейки. Вы можете удалить строку:

[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YEs]; 
1

Если вы хотите попробовать это анимация, если вы не хотите использовать анимацию ответ @Mountain Льва.

-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath { 

     if (editingStyle == UITableViewCellEditingStyleDelete) 
     { 
      [self.modleClass.foldersAray removeObjectAtIndex:indexPath.row]; 
      [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade]; 
     } 
} 

И если у вас есть кнопки редактирования на навигации, вы должны вызвать

[self.tableView setEditing: ДА анимированный: YES];

внутри вашего метода, чтобы начать редактирование.

1

ЕСЛИ память он принимает не имеет значения для вас ... то вы можете значительно удалить (скрыть) ячейку, установив высоту 0.

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row%2) { 
     return 0; 
    } 
    return 100; 
} 

P.S: над фиктивным кодом будет резко удалить альтернативные ячейки.

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