删除 UITableView 部分中的最后一行时出现此错误。
*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:节数无效。更新后表视图中包含的节数(2)必须等于更新前表视图中包含的节数(3),加上或减去插入或删除的节数(0插入,0已删除)。
如果数组的计数大于 0,我的表有 3 个部分(用户可以自己添加位置)。如果数组等于 0,那么表只包含 2 部分,这是我认为问题所在,我只是想不通。
我用于删除单元格和更新数组的代码是:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell* delCell = [tableView cellForRowAtIndexPath:indexPath];
delName = delCell.textLabel.text;
[self deleteLocation];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
-(void)deleteLocation {
NSLog(@"Name = %@",delName);
NSUserDefaults *customLocations = [NSUserDefaults standardUserDefaults];
NSUserDefaults *sharedPref = [NSUserDefaults standardUserDefaults];
[customLocations removeObjectForKey:delName];
[customLocations synchronize];
[customLoc removeObject:delName];
saveCustomLoc = [NSArray arrayWithArray:customLoc];
[sharedPref setObject:saveCustomLoc forKey:@"CustomLocations"];
[sharedPref synchronize];
NSLog(@"%@",saveCustomLoc);
NSLog(@"%lu",(unsigned long)[saveCustomLoc count]);
[self showAlert];
}
- (void) showAlert {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Location Deleted"
message:@"The location has been deleted"
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
这在最后一个单元格之前效果很好。
我的桌子如何设置的一个例子是:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
if ([customLoc count] == 0) { // If there is no data in the custom locations array the don't include that section
if (section == 0) {
return [serverSelection count];
}
else {
return [qServerSelection count];
}
}
else {
if (section == 0) {
return [customLoc count];
}
else if (section == 1) {
return [serverSelection count];
}
else {
return [qServerSelection count];
}
}
所以标题/行数/节数等取决于数组的内容。我认为正在删除单元格的部分消失了(或者更确切地说,随着第 1 部分移动到第 0 部分,突然有 4 个单元格)这一事实导致了这个问题。
任何想法如何解决这个问题?