在上下文中编辑所有实体
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 版本。
我有疑问,在使用 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 版本。