更新大型核心数据的值

时间:2015-08-22 08:35:48

标签: ios core-data

我正在使用核心数据创建大约1800条记录。我真的没有将值插入核心数据的问题,但是当我尝试更新现有值时,它需要很长时间。这就是我的做法:

b

1 个答案:

答案 0 :(得分:1)

您正在数组setValue:forKey:上调用Sales。这会自动在数组的每个成员上调用该方法。来自documentation

  

使用指定的值和键在每个数组的项目上调用setValue:forKey:。

但是你已经将它包裹在一个for循环中,重复它~1800次。删除for循环,或直接在数组的每个成员上调用setValue:forKey:,例如

        [Sales[i] setValue:value1 forKey:@"value1"];

如果您执行后者,请将保存移到for循环之外,这样上下文会在结尾处保存一次,而不是在每个项目之后保存。

所以:

    [Sales setValue:value1 forKey:@"value1"];
    [Sales setValue:value2 forKey:@"value2"];
    [Sales setValue:value3 forKey:@"value3"];
    [Sales setValue:value4 forKey:@"value4"];
    [Sales setValue:value5 forKey:@"value5"];
    [context save:nil];

    for (int i = 0; i<Sales.count; i++)
    {
        [Sales[i] setValue:value1 forKey:@"value1"];
        [Sales[i] setValue:value2 forKey:@"value2"];
        [Sales[i] setValue:value3 forKey:@"value3"];
        [Sales[i] setValue:value4 forKey:@"value4"];
        [Sales[i] setValue:value5 forKey:@"value5"];
    }
    [context save:nil];