我怀疑使用魔法记录更改所有记录的某些属性时的最佳做法。
唯一的方法是,我找到的是获取保存块中的所有实体并逐个枚举后。有更好的解决方案吗?
[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。
答案 0 :(得分:0)
这是核心数据方式。获取,更改,重复。
但是,如果你有很多要做的事情,你应该将它们全部包装在autoreleasepool中,然后小批量地完成它们,并将每个批次的对象转回故障。这可以防止内存爆炸。
但是,您可以使用NSBatchUpdateRequest
。
我不使用MR,但快速谷歌搜索显示此链接,标题为“Add support for magical batch requests。”
然而,看起来这套功能的提交相对较新(在10月10日提交),所以你必须自己做一些工作,看它是否已成为正式版本......或者如果你想使用预发行版本。