如何从 ManagedObjectContext 中删除给定实体的所有对象
Posted
技术标签:
【中文标题】如何从 ManagedObjectContext 中删除给定实体的所有对象【英文标题】:How to delete all objects for a given entity from the ManagedObjectContext 【发布时间】:2010-04-30 20:14:02 【问题描述】:我不想对我的 ManagedObjectContext 使用重置方法。我只需要删除特定实体的所有对象,但我没有看到任何这样做的方法。选择特定实体的所有对象并循环遍历每个对象并删除它们是可行的,但速度很慢。
【问题讨论】:
【参考方案1】:选择特定实体的所有对象并遍历每个对象并删除它们是可行的
你就是这么干的。
【讨论】:
就这样?荒谬的。重置方法需要几毫秒,而这种循环废话可能需要很多秒。 如果您的实体与其他实体有依赖关系,则必须对其进行管理。我很确定这就是为什么它们被称为托管对象。这可能会产生一些开销。 我没有任何粗鲁的意思,只是解释为什么这些对象被称为“托管”——当你删除一个对象并保存上下文时,还有其他事情发生。如果您的删除没有快速运行,我建议您查看数据模型中的关系,特别是查看这些关系的删除规则。例如,如果您“级联”删除,这些额外事务就会产生开销。希望这会有所帮助。【参考方案2】:类别来救援!再次。
NSManagedObjectContext+MyExtensions.h
@interface NSManagedObjectContext (MyExtensions)
-(void) deleteAllInstancesOfEntity:(NSString*) entity;
@end
NSManagedObjectContext+MyExtensions.m
#import "NSManagedObjectContext+MyExtensions.h"
@implementation NSManagedObjectContext (MyExtensions)
-(void) deleteAllInstancesOfEntity:(NSString*) entity
NSError* error;
for (NSManagedObject* o in
[self executeFetchRequest:[NSFetchRequest fetchRequestWithEntityName:entity]
error:&error])
[o.managedObjectContext deleteObject:o];
@end
用法
NSManagedObjectContext *myMOC = ...;
[myMOC deleteAllInstancesOfEntity:@"SmellyCheese"];
类别很棒。
【讨论】:
以上是关于如何从 ManagedObjectContext 中删除给定实体的所有对象的主要内容,如果未能解决你的问题,请参考以下文章
如何从 managedObjectContext 中删除未保存的对象
如何从我的视图控制器引用我的 App Delegate 中的 managedObjectContext?
将 ManagedObjectContext 传递/注入到视图控制器中
为啥从 UIApplicationDelegate 获取 ManagedObjectContext 的 Apple 文档不好?