【问题标题】:how to change the index of the CoreData when reordering the TableView?重新排序 TableView 时如何更改 CoreData 的索引?
【发布时间】: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 索引的值的索引。

【问题讨论】:

    标签: ios objective-c iphone core-data tableview


    【解决方案1】:

    查看下面的教程

    http://www.cimgf.com/2010/06/05/re-ordering-nsfetchedresultscontroller/

    简而言之,您需要将“displayIndex”属性添加到您尝试重新编码的对象中

    【讨论】:

    • 我已经尝试过该链接。它在从数据库中获取值时以升序或降序对记录进行重新排序。
    • 如果您将 displayOrder 属性添加到实体并在将数据显示到表格视图之前根据 displayOrder 对数据进行排序,这不会解决您的问题
    猜你喜欢
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多