在UItableView中重新排序单元格并将(新顺序)插入到数据库中

时间:2014-02-05 04:45:04

标签: ios uitableview sdk insert

我有一个由NSMutableArray填充的表。用户可以按需要重新排序单元格(行)。我想从继承重新排序序列的数组中将记录插入数据库。

所以说表加载了: 第1行 第2行 第3行 第4行

用户重新排序: 第4行 第2行 第1行 第3行

我想用重新排序的序列将数据推送到数据库。但是,当我通过UITableView重新排序行后通过循环插入所有四行时,顺序将以原始顺序进入数据库(而不是重新排列的顺序)。

有没有办法从重新排序的表中刷新数组?

2 个答案:

答案 0 :(得分:2)

您的记录应该有一个“订单”字段并将其存储到数据库中。从数据库加载时,您应该使用字段对记录进行排序。

编辑:下面的代码说明了这个想法

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
    if (destinationIndexPath.row > sourceIndexPath.row) {
        for (NSInteger row = sourceIndexPath.row + 1; row <= destinationIndexPath.row; ++row) {
            Record* record = array[row];
            record.row = [NSNumber numberWithInt:record.row.intValue - 1];
        }
    } else if (destinationIndexPath.row < sourceIndexPath.row) {
        for (NSInteger row = destinationIndexPath.row; row < sourceIndexPath.row; ++row) {
            Record* record = array[row];
            record.row = [NSNumber numberWithInt:record.row.intValue + 1];
        }
    }
    Record* record = array[sourceIndexPath.row];
    record.row = [NSNumber numberWithInt:destinationIndexPath.row];
    [array removeObjectAtIndex:sourceIndexPath.row];
    [array insertObject:record atIndex:destinationIndexPath.row];
    [self save];
}

- (void)loadFromCoreData {
    NSFetchRequest* request = [[NSFetchRequest alloc] init];
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"Record" inManagedObjectContext:_managedObjectContext];
    request.entity = entity;

    NSSortDescriptor* sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"row" ascending:YES];
    NSArray* sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    request.sortDescriptors = sortDescriptors;

    NSError* error;
    array = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
}

答案 1 :(得分:0)

我认为更好的方法是将行号作为字段与其他单元格数据一起存储。这样,只要您想再次显示数据,就可以使用行号来构建用户的订单。