Удаление ячейки из UITableView - ошибка - PullRequest
0 голосов
/ 14 июля 2011

В моем приложении для iPhone у меня есть UITableView со следующим методом

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [tableArrays count];
}

Обратите внимание, что tableArrays - это переменная класса (NSMutableArray из NSMutableArrays - представляющий один NSMutableArray для каждого раздела в моем tableView). Теперь этот UITableView поддерживает редактирование, и у меня есть следующий метод

- (void)tableView:(UITableView *)theTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    ...some code...

    NSLog(@"tableArrays count is %i",[tableArrays count]);
    [tableArrays removeObjectAtIndex:indexPath.section];
    NSLog(@"tableArrays is now %@",tableArrays);
    NSLog(@"tableArrays count is now %i",[tableArrays count]);


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

}

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

tableArrays count is 2
tableArrays is now (("Blah1","Blah2"))
tableArrays count is now 1

Ясно, что мой счет tableArrays уменьшается на единицу, но я получаю следующую ошибку:

...The number of sections contained in the tableView after the update (1) must be qual to the number of sections contained in the table view before the update (2), plus or minus the number of sections inserted or dleted (0 inserted, 0 deleted).'

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Ключ должен использовать

[tableView deleteSections:[NSIndexSet indexSetWithIndex:indexPath.section] withRowAnimation:UITableViewRowAnimationFade];

при попытке удалить последнюю строку в разделе.

1 голос
/ 14 июля 2011

Я предполагаю, что в -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; вы возвращаете общее количество объектов и хотите отобразить только один раздел.

Попробуйте вернуть один в этом методе.

Вы также должны вернуть [tableArrays count] in -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;.

Должно работать лучше вот так.И что такое section в

[tableArrays removeObjectAtIndex:section];?Вы имели в виду indexPath.section?

Спасибо за комментарий, поэтому метод, который возвращает номер раздела, является правильным, но вы должны сделать это, чтобы удалить ячейку.

NSLog(@"tableArrays count is %i",[tableArrays count]);
NSMutableArray *sectionArray = [tableArrays objectAtIndex:indexPath.section];
[sectionArray removeObjectAtIndex:indexPath.row];
//[tableArrays removeObjectAtIndex:indexPath.section];
NSLog(@"tableArrays is now %@",tableArrays);
NSLog(@"tableArrays count is now %i",[tableArrays count]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...