좋은 답변이 이미 게시되었습니다. 이것은 추천 일뿐입니다!
좋은 방법은 카테고리를 추가하고 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
... 당신이해야 할 유일한 것은 app delegate에서 managedObjectContext를 가져 오는 것입니다.
나중에 다음과 같이 사용할 수 있습니다.
[NSManagedObject deleteAllFromEntity:@"EntityName"];
하나의 추가 최적화는 tha 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"];