Я создаю приложение для развлечения с контроллером начального представления таблицы, в котором вы можете видеть детали ячеек и добавлять новые данные в таблицу.
Прежде всего, вот проект, так что вы можете загрузить его и посмотреть. http://dawtano.com/xc-project.zip
Это немного сложный проект, и я думаю, многокода устарела, но первоначальное приложение работает, поэтому я пока не хочу его очищать.
Приложение построено на раскадровке и состоит из:
- DataModel (содержит исходный NSMutableArray)
- ViewController (основной вид)
- EditGrade (добавление данных в представление таблицы)
- Grade (определение используемых строк)
- GradeDetail (показывает детали ячейки)
EditGrade также содержит делегата, который добавляет функцию к кнопке Отмена и Готово.
Все работает (кроме кнопки Редактировать на GradeDetail)как следует, за исключением случаев, когда я пытаюсь добавить новые данные в таблицу.Проект строится без проблем.Это сообщение об ошибке, которое я получаю, и я не смог выяснить, в чем проблема:
2011-12-08 12:56:54.643 ArrayTableView[30711:f803] *** Assertion failure in -
[_UITableViewUpdateSupport _computeRowUpdates], /SourceCache/UIKit_Sim/UIKit-
1912.3/UITableViewSupport.m:386
2011-12-08 12:56:54.645 ArrayTableView[30711:f803] ***
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Invalid table view update. The application has requested an update to
the table view that is inconsistent with the state provided by the data source.'
Я надеюсь, что некоторые из вас смогут определить, в чем проблема, я сейчасуставившись на него вслепую.
Обновление
Благодаря @TJ я обнаружил ошибку в проекте, теперь проблема заключается в ее корректной реализации, поэтому addGrade работает.
Я добавил этот код в поле, которое @TJ указал:
- (void)tableView:(UITableView *)tableView commitEditingStyle:
(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
[self.dataModel removeGradeAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array,
and add a new row to the table view
[self.dataModel addGrade:(Grade*)grades];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}
}
Использую ли я правильное кодирование?У меня ощущение, что
[self.dataModel addGrade:(Grade*)grades];
неверно.Поскольку DataModel использует:
- (void)addGrade:(Grade*)grade
{
[self.grades addObject:grade];
}