重新排序 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顺序

使用 Core Data 时如何重新排列部分

使用新的 iOS 11 API 重新排序 tableview 时动画不正确

如何在 swift 中使用 fetchedresultscontroller 重新排序 tableview 行?

如何在 dotnet core 3 控制台应用程序中更改时重新加载“appsettings.json”