我有一个由NSMutableArray填充的表。用户可以按需要重新排序单元格(行)。我想从继承重新排序序列的数组中将记录插入数据库。
所以说表加载了: 第1行 第2行 第3行 第4行
用户重新排序: 第4行 第2行 第1行 第3行
我想用重新排序的序列将数据推送到数据库。但是,当我通过UITableView重新排序行后通过循环插入所有四行时,顺序将以原始顺序进入数据库(而不是重新排列的顺序)。
有没有办法从重新排序的表中刷新数组?
答案 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)
我认为更好的方法是将行号作为字段与其他单元格数据一起存储。这样,只要您想再次显示数据,就可以使用行号来构建用户的订单。