重新排列UItableview
行按预期工作
-(void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath {
[self.circuits exchangeObjectAtIndex:sourceIndexPath.row withObjectAtIndex:destinationIndexPath.row]; // Self circuits is array for table view
[self.appDelegate saveContext]; // Core data save method
}
问题是:重新加载时,位置未保存
我不确定这是不是因为我没有正确保存核心数据,虽然[self.appDelegate saveContext];
应该更新它,或者我没有在重新定位行时对数组进行排序。
正在加载表格视图的数据:
@property (nonatomic, strong) NSMutableArray *circuits;
- (void)loadData
{
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"createdAt" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
self.circuits = [[self.distributionBoard.circuits sortedArrayUsingDescriptors:sortDescriptors] mutableCopy];
}
请注意:如果我将NSSortDescriptor
更改为modifiedAt
而不是createAt
,则这对排序顺序没有影响
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"modifiedAt" ascending:YES];
NSArray *sortDescriptors = @[sortDescriptor];
self.circuits = [[self.distributionBoard.circuits sortedArrayUsingDescriptors:sortDescriptors] mutableCopy];
编辑:显示核心数据模型中的删除对象
[self.managedObjectContext deleteObject:(self.circuits)[indexPath.row]];
[self.appDelegate saveContext];
[self.circuits removeObjectAtIndex:indexPath.row];
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
答案 0 :(得分:0)
目前,您的数组和排序顺序与您所做的任何表视图更改完全分离。重新排序数组不会更改上下文中的任何对象,因此它不会变脏并且不会保存。这就是为什么排序顺序无效。
如果您在对象上编辑了某些内容,则修改日期排序会显示更改,但您必须编辑许多对象才能获得新订单。
实际上,每个对象都应该有一个顺序或您排序的其他属性(存储在核心数据模型中)。当用户更改表中的顺序时,您需要更新这些属性并保存上下文。插入对象时,需要添加一个值以确保新项目位于列表的末尾。删除项目时,您需要决定是否修改所有值以填补空白,或者如何跟踪插入时的当前最高值...