我有一个有多个section的TableView它有一个委托数据源它链接到一个数组的数组。数组的数组中的每个数组都是它自己的Table View Section。我有它正确加载,并有一个编辑按钮启用,但当我试图删除我的应用程序崩溃与以下错误。
***由于未捕获异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:无效的节数。
更新后表视图中包含的节数(9)必须等于更新前表视图中包含的节数(10),加上或减去插入或删除的节数(0插入,0删除)。现在我没有删除一个部分,所以我有点困惑,这里是我的代码样本。我已经搜索了这个论坛,但就是找不到我做错了什么。
这是我的代码:
// Calculate how many sections in the table view from the array or arrays
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView{
AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
NSInteger sections = [delegate.packing.packingListArray count];
return sections;
}
// Load the array and extract the count of items for each section
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
// For each array within the array of array count the items
AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
NSArray *sectionContents = [delegate.packing.packingListArray objectAtIndex:section];
NSInteger rows = [sectionContents count];
return rows;
}
// Load the list into the table view
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Set the cell identifier - using ID field thats been set in interface builder
static NSString *CellIdentifier = @"DestinationCell";
// Re-use existing cell?
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// If no reusabled cells then create a new one
if (cell == nil){
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Add the relevant packing list array from the array of arrays
AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
NSArray *sectionContents = [delegate.packing.packingListArray objectAtIndex:[indexPath section]];
NSString *contentForThisRow = [sectionContents objectAtIndex:[indexPath row]];
cell.textLabel.text = contentForThisRow;
// Return the formatted cell with the text it needs to display in the row
return cell;
}
// Delete row from table and update data source array
- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle) editingStyle forRowAtIndexPath:(NSIndexPath *) indexPath {
if (editingStyle ==UITableViewCellEditingStyleDelete) {
[tableView beginUpdates];
// Delete the item from the array
AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
[delegate.packing.packingListArray removeObjectAtIndex:indexPath.row];
// Delete the row from the table view
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
}
}
我有一种感觉,这可能与数组的数组创建多个section的复杂性有关但一定有某种方法可以做到这一点?
任何帮助都非常感谢,因为我已经看了几个小时相同的代码了。
我终于设法解决了这个问题,有几个问题,然后结束。这都是由于我试图从数组或数组中删除项目的方式。我应该使用的代码是这样的:
AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
[[delegate.packing.packingListArray objectAtIndex:indexPath.section] removeObjectAtIndex:indexPath.row];
然后我有一个问题,我有我的数组定义的方式,因为他们是从plist,虽然设置为NSMutableArray,他们被转换为NSArray。因此,在语句的末尾,我加入了。
........mutablecopy];
所有问题解决:)