Я пытаюсь удалить строку таблицы, которая отображается в моем контроллере разделенного представления. Когда я смахиваю влево и нажимаю «Удалить», мое приложение вылетает, и я получаю сообщение об ошибке:
Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 0. Количество строк, содержащихся в существующем разделе после обновления (44), должно быть равно количеству строк, содержащихся в этом раздел до обновления (44), плюс или минус количество строк, вставленных или удаленных из этого раздела (0 вставленных, 1 удаленных) и плюс или минус количество строк, перемещенных в этот раздел или из него (0 перемещенных, 0 перемещенных вне).'
Мне удалось заставить параметр перераспределения работать для табличного представления без каких-либо ошибок. Для функции удаления строки я сделал следующее:
- (void)tableView:(UITableView *)tableView commitEditingStyle: (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[_objects removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationAutomatic];
}
Но должно быть что-то, что я упускаю. Возможно, простое обновление таблицы. Я думаю, что пробовал, но безуспешно.
Я знаю, что будет сложно определить, как использовать только один метод в моем проекте. Весь мой проект можно посмотреть здесь:
https://github.com/mithunan/presidents-splitView
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ----
Это метод numberOfRowsInSection:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.presidents count];
}
и этот метод тоже может помочь...
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
id object = [self.presidents objectAtIndex:fromIndexPath.row];
[_objects removeObjectAtIndex:fromIndexPath.row];
[_objects insertObject:object atIndex:toIndexPath.row];
}
Спасибо
РЕДАКТИРОВАТЬ 2 -------------
Основываясь на информации, предоставленной rmaddy, я изменил commitEditingStyle...
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.presidents removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
Но теперь я получаю ошибку сборки: никакой видимый @interface для NSArray объявляет селектор «removeObjectAtIndex:»
Извините, если я прошу слишком многого, но не могли бы вы рассказать мне об этом.
_objects
не являетсяnil
при вызовеcommitEditingStyle
. 2) Убедитесь, что вашnumberOfRowsInSection
возвращает правильное новое количество строк после удаления объекта из_objects
. - person rmaddy   schedule 04.08.2014_objects
равноnil
, вы не обновляете свою модель данных, чтобы отразить удаленную строку. Опубликуйте свой методnumberOfRowsInSection
в своем вопросе. Что он использует для возврата количества строк? Это_objects
или что-то другое? - person rmaddy   schedule 04.08.2014self.presidents
, но по какой-то неизвестной причине вы пытаетесь обновить_objects
. Это бессмысленно. Вам нужно использовать одни и те же данные. Удалите объект изself.presidents
вместо_objects
. То же и с ходом. - person rmaddy   schedule 04.08.2014presidentsArray
изменяемым. - person rmaddy   schedule 05.08.2014