编辑上下文中的所有实体

时间:2015-11-09 22:14:10

标签: ios core-data magicalrecord

我怀疑使用魔法记录更改所有记录的某些属性时的最佳做法。

唯一的方法是,我找到的是获取保存块中的所有实体并逐个枚举后。有更好的解决方案吗?

 [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
        NSArray * devices = [CDDevice MR_findByAttribute:@"primary" withValue:@"YES" inContext:localContext];

        [devices enumerateObjectsUsingBlock:^(CDDevice  * device, NSUInteger idx, BOOL * _Nonnull stop) {
            CDDevice * tmpDevice = [device MR_inContext:localContext];
            tmpDevice.primary = @(0);
        }];
    } completion:^(BOOL contextDidSave, NSError *error) {
        ;
    }];

这样的东西
[CDDevice MR_ChangeAtribute:"primary" toValue:@(0)];

所有CDDevice记录的更改都将主要更改为YES。

1 个答案:

答案 0 :(得分:0)

这是核心数据方式。获取,更改,重复。

但是,如果你有很多要做的事情,你应该将它们全部包装在autoreleasepool中,然后小批量地完成它们,并将每个批次的对象转回故障。这可以防止内存爆炸。

但是,您可以使用NSBatchUpdateRequest

来避免所有这些

我不使用MR,但快速谷歌搜索显示此链接,标题为“Add support for magical batch requests。”

然而,看起来这套功能的提交相对较新(在10月10日提交),所以你必须自己做一些工作,看它是否已成为正式版本......或者如果你想使用预发行版本。