良い回答がすでに投稿されています。これは単なる推奨事項です!
良い方法は、カテゴリを追加して、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"];
さらに最適化するには、entitynameのパラメーターを削除し、代わりにclazznameから名前を取得します。これは使用法につながります:
[ClazzName deleteAllFromEntity];
よりクリーンな実装(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"];