Да, так много вопросов задают при переполнении стека по аналогичному заголовку вопроса. Я читал все, но я никогда не видел, чтобы моя проблема была эквивалентна им. Теперь моя проблема в том, что если я обновляю таблицу раздела 0 с 3 строками при щелчке по заголовку в разделе 0, а затем снова нажимаю на тот же заголовок, чтобы удалить все 3 строки из раздела 0, это отлично работает со мной. Но если я открою (обновить раздел 0 тремя строками), а затем я нажму на другой раздел заголовка (другой раздел, который я хочу открыть после 0-го раздела), мое приложение разбилось. Я хочу сказать, что хочу, если я нажму другой раздел, тогда мой другой раздел должен быть открыт, а предыдущий открытый раздел должен быть закрыт. см моего кода для вставки и удаления разделов и строк,Tableview update 'NSInternalInconsistencyException', причина: 'Неверное обновление: недопустимое количество строк?
-(void)sectionHeaderView:(TableHeaderView*)sectionHeaderView sectionOpened:(NSInteger)section{
self.sectionOpen = YES;
//Create an array containing data of rows and section which to be inserted in tableView.
NSMutableArray *dataInsertArray = [NSMutableArray arrayWithArray:[self.tableDataSourceDictionary objectForKey: [self.sortedKeys objectAtIndex:section]]];
NSInteger countOfRowsToInsert = [dataInsertArray count];
NSMutableArray *indexPathsToInsert = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < countOfRowsToInsert; i++) {
[indexPathsToInsert addObject:[NSIndexPath indexPathForRow:i inSection:section]];
}
[self.tableContents setObject:dataInsertArray forKey:[self.sortedKeys objectAtIndex:section]];
//Create an array containing data of rows and section which to be delete from tableView.
NSMutableArray *indexPathsToDelete = [[NSMutableArray alloc] init];
NSInteger previousOpenSectionIndex = self.openSectionIndex;
if (previousOpenSectionIndex != NSNotFound) {
self.sectionOpen = NO;
[previousTableHeader toggleOpenWithUserAction:NO];
NSInteger countOfRowsToDelete = [[self.tableContents objectForKey: [self.sortedKeys objectAtIndex:section]] count];
for (NSInteger i = 0; i < countOfRowsToDelete; i++) {
[indexPathsToDelete addObject:[NSIndexPath indexPathForRow:i inSection:previousOpenSectionIndex]];
}
[self.tableContents removeObjectForKey:[self.sortedKeys objectAtIndex:previousOpenSectionIndex]];
}
// Apply the updates.
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:indexPathsToDelete withRowAnimation:UITableViewRowAnimationFade];
[self.tableView insertRowsAtIndexPaths:indexPathsToInsert withRowAnimation:UITableViewRowAnimationFade];
[self.tableView endUpdates];
self.openSectionIndex = section;
self.previousTableHeader = sectionHeaderView;
}
И мои методы источника данных,
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
NSInteger numberOfSection = [self.sortedKeys count];
return numberOfSection;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSArray *listData =[self.tableContents objectForKey: [self.sortedKeys objectAtIndex:section]];
NSInteger numberOfRows = [listData count];
return numberOfRows;
}
Моего отчета об ошибке, отказа утверждения - [UITableView _endCellAnimationsWithContext:]/SourceCache /UIKit_Sim/UIKit-2372/UITableView.m:1070 2013-02-18 11: 44: 49.343 ManageId [1029: c07] Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «Недействительное обновление: недопустимое количество строк в раздел 0. Количество строк, содержащихся в существующем разделе после обновление (0) должно быть равно количеству строк, содержащихся в этом разделе, перед обновлением (3) плюс или минус количество строк, вставленных или удаленных из этого раздела (вставлено 0, 1 удалено) и плюс или минус число из строк, перемещенных в или из этой секции (0 перемещен, 0 перемещен). '
Просто предположим, что мои 2 секции содержат 3 - 3 строки, тогда он будет работать файл. Но если 2 секции содержат 3 - 2 строки, то это сбой. Я хочу переключить два раздела, щелкнув по обновлению заголовка раздела с непоследовательным числом строк в этих разделах.
Чем
Попробуйте удалить строки первыми и окончание обновление затем вставить строки с новым update.Or используйте метод reloadData и он будет добавлять удаленные строки автоматически на основе значений источника данных. – fibnochi
@fibnochi, я уже делал все. Но успеха нет. – Tirth
Попробуйте вставить, а затем удалите строки. Таким образом, сначала будет добавлено количество строк, а затем удалено. – fibnochi