在上下文中编辑所有实体

Edit all entities in context

我有疑问,在使用 Magical Record 更改所有记录的某些属性时,最佳做法是什么。

我发现的唯一方法是获取保存块中的所有实体,然后一一枚举。有更好的解决方案吗?

 [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 记录的更改将主要更改为是。

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

但是,如果您有很多事情要做,您应该将它们全部包装在一个自动释放池中,并分小批进行,然后将 objects 返回为每批的故障。这样可以防止内存爆炸。

但是,您可以使用 NSBatchUpdateRequest.

来避免所有这些情况

我不使用 MR,但快速 google 搜索发现了这个 link,标题为“Add support for magical batch requests”。

但是,这组功能的提交似乎相对较新(10 月 10 日提交),因此您必须自己做一些工作,看看它是否已进入正式版本...或者如果你想使用 pre-release 版本。