所以我有这段代码来删除tableview中的一行:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
[self.cellArray removeObjectAtIndex:indexPath.row/2];
[[NSUserDefaults standardUserDefaults] setObject:self.cellArray forKey:@"cellArray"];
[tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath] withRowAnimation:YES];
}
现在我做indexPath.row / 2,因为我这样做:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [cellArray count] * 2;
}
仅仅是因为它使我的UI看起来像它的样子。无论如何这是崩溃:
***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的行数无效。更新后现有部分中包含的行数(42)必须等于更新前该部分中包含的行数(44),加上或减去从该部分插入或删除的行数(插入0,删除1),加上或减去移入或移出该部分的行数( 0移入,0移出)。'
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
NSIndexPath *nextPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
[self.cellArray removeObjectAtIndex:indexPath.row/2];
[[NSUserDefaults standardUserDefaults] setObject:self.cellArray forKey:@"cellArray"];
[tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObjects:indexPath, nextPath, nil] withRowAnimation:UITableViewRowAnimationFade];
}
答案 0 :(得分:1)
也许这只是这一行中的一个小错字。
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
[self.cellArray removeObjectAtIndex:indexPath.row]; // Returning a number instead of possible double
...
}
答案 1 :(得分:1)
问题是您在单元格数组中每个对象使用两个表行。但是在您发布的代码中,您只从表中删除了一行。您需要删除两行。
NSIndexPath *nextPath = [NSIndexPath indexPathForRow:indexPath.row + 1 inSection:indexPath.section];
[tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObjects:indexPath, nextPath, nil] withRowAnimation: UITableViewRowAnimationFade];
BTW - YES
不是行动画的有效参数。