重新排序 TableView 时如何更改 CoreData 的索引?
Posted
技术标签:
【中文标题】重新排序 TableView 时如何更改 CoreData 的索引?【英文标题】:how to change the index of the CoreData when reordering the TableView? 【发布时间】:2017-04-05 05:31:32 【问题描述】:请检查代码并告诉我我在这里做错了什么。
TableViewController.m
-(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
NSManagedObjectContext *context = [self managedObjectContext];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Device" inManagedObjectContext:context];
NSFetchRequest *fetchrequest = [[NSFetchRequest alloc]initWithEntityName:entity];
_devices = [[context executeFetchRequest:fetchrequest error:nil]mutableCopy];
[self.tableView reloadData]; // When TableView is reloading the data in tableview updating according to the data stored via CoreData.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
if (fromIndexPath != toIndexPath )
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *device = [self.devices objectAtIndex:fromIndexPath.row];
NSString *str1 = [device valueForKey:@"text1"];
NSLog(@"%@",str1);
[self.devices removeObject:device];
[self.devices insertObject:device atIndex:[toIndexPath row]];
// int i = 0;
// for (NSManagedObject *mo in self.devices)
//
// NSManagedObject *new = [self.devices objectAtIndex:i];
// NSString *check = [new valueForKey:@"text1"];
// NSLog(@"%@",check);
// NSString *check1 = [new valueForKey:@"text2"];
// NSLog(@"%@",check1);
// NSString *check2 = [new valueForKey:@"text3"];
// NSLog(@"%@",check2);
// [mo setValue:[NSString stringWithFormat:@"%@",[new valueForKey:@"text1"]] forKey:@"text1"];
// [mo setValue:[NSString stringWithFormat:@"%@",[new valueForKey:@"text2"]] forKey:@"text2"];
// [mo setValue:[NSString stringWithFormat:@"%@",[new valueForKey:@"text3"]] forKey:@"text3"];
// i++;
//
NSError *error;
if(![context save:&error])
NSLog(@"%@ %@",error, [error localizedDescription]);
我有实体名称:设备,列名:text1,text2,text3
我不想对 Core Data 中的数据进行排序,实际上我想移动 TableView 中的行并且我想更新保存在 text1、text2、text3 列中的数据的索引。总的来说,tableview 中有 5 行,我只想更新相对于更新的 tableview 索引的值的索引。
【问题讨论】:
【参考方案1】:查看下面的教程
http://www.cimgf.com/2010/06/05/re-ordering-nsfetchedresultscontroller/
简而言之,您需要将“displayIndex”属性添加到您尝试重新编码的对象中
【讨论】:
我已经尝试过该链接。它在从数据库中获取值时以升序或降序对记录进行重新排序。 如果您将 displayOrder 属性添加到实体并在将数据显示到表格视图之前根据 displayOrder 对数据进行排序,这不会解决您的问题以上是关于重新排序 TableView 时如何更改 CoreData 的索引?的主要内容,如果未能解决你的问题,请参考以下文章
在编辑模式下重新排序时更改 UITableViewCell 的背景颜色
如何在swift 4中重新排序单元格后保存tableView顺序
使用新的 iOS 11 API 重新排序 tableview 时动画不正确