应用程序在删除重新排序的UITableViewCells后崩溃

时间:2014-05-07 07:20:28

标签: ios objective-c uitableview

我试图允许用户重新排序UITableView并删除它的单元格。 重新排序工作正常。如果单元格尚未重新排序,删除也可以正常工作。但是,如果我使用moveRowAtIndexPath对单元格重新排序并删除一个单元格,则会删除错误的单元格/数据。假设我已将数据A,B,C重新排序为A,C,B。如果我删除“C”,则结果将为A,C而不是A,B。我正在使用NSMutableArray从中获取数据并设置为UITableView。

-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
    MyObject *obj = [myArray objectAtIndex:sourceIndexPath.row];
    [myArray removeObject:obj];
    [myArray insertObject:obj atIndex:destinationIndexPath.row];
}

并删除如下所示:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    [myArray removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationBottom];
    [tableView endUpdates];
}

2 个答案:

答案 0 :(得分:1)

您还需要正确更新数据源。

试试这个方便的category. ..

@interface NSMutableArray (MoveArray)

- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to;

@end

- (void)moveObjectFromIndex:(NSUInteger)from toIndex:(NSUInteger)to
    {
        if (to != from) {
            id obj = [self objectAtIndex:from];
            [self removeObjectAtIndex:from];
            if (to >= [self count]) {
                [self addObject:obj];
            } else {
                [self insertObject:obj atIndex:to];
            }
        }
    }
    @end

答案 1 :(得分:1)

您发布的代码看起来不错。我认为问题可能在其他地方。有可能你可以修复它取代

[myArray removeObject:obj];

[myArray removeObjectAtIndex:sourceIndexPath.row];