已经发布了一个很好的答案,这只是一个建议!
一个好方法是向NSManagedObject 添加一个类别并像我一样实现一个方法:
头文件(例如NSManagedObject+Ext.h)
@interface NSManagedObject (Logic)
+ (void) deleteAllFromEntity:(NSString*) entityName;
@end
代码文件:(例如 NSManagedObject+Ext.m)
@implementation NSManagedObject (Logic)
+ (void) deleteAllFromEntity:(NSString *)entityName {
NSManagedObjectContext *managedObjectContext = [AppDelegate managedObjectContext];
NSFetchRequest * allRecords = [[NSFetchRequest alloc] init];
[allRecords setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext]];
[allRecords setIncludesPropertyValues:NO];
NSError * error = nil;
NSArray * result = [managedObjectContext executeFetchRequest:allRecords error:&error];
for (NSManagedObject * profile in result) {
[managedObjectContext deleteObject:profile];
}
NSError *saveError = nil;
[managedObjectContext save:&saveError];
}
@end
...您唯一需要做的就是从应用程序委托或您拥有它的每个地方获取 managedObjectContext ;)
之后你可以像这样使用它:
[NSManagedObject deleteAllFromEntity:@"EntityName"];
进一步的优化可能是您删除实体名称的参数并从 clazzname 中获取名称。这将导致使用:
[ClazzName deleteAllFromEntity];
一个更干净的 impl(作为 NSManagedObjectContext 的类别):
@implementation NSManagedObjectContext (Logic)
- (void) deleteAllFromEntity:(NSString *)entityName {
NSFetchRequest * allRecords = [[NSFetchRequest alloc] init];
[allRecords setEntity:[NSEntityDescription entityForName:entityName inManagedObjectContext:self]];
[allRecords setIncludesPropertyValues:NO];
NSError * error = nil;
NSArray * result = [self executeFetchRequest:allRecords error:&error];
for (NSManagedObject * profile in result) {
[self deleteObject:profile];
}
NSError *saveError = nil;
[self save:&saveError];
}
@end
当时的用法:
[managedObjectContext deleteAllFromEntity:@"EntityName"];