Một câu trả lời tốt đã được đăng, đây chỉ là một khuyến nghị!
Một cách tốt là chỉ cần thêm một danh mục NSManagedObject
và thực hiện một phương pháp như tôi đã làm:
Tệp tiêu đề (ví dụ NSManagedObject+Ext.h
)
@interface NSManagedObject (Logic)
+ (void) deleteAllFromEntity:(NSString*) entityName;
@end
Mã tệp: (ví dụ: 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
... điều duy nhất bạn phải làm là có được ManagedObjectContext từ đại biểu ứng dụng hoặc nơi bạn có nó;)
Sau đó, bạn có thể sử dụng nó như:
[NSManagedObject deleteAllFromEntity:@"EntityName"];
một tối ưu hóa nữa có thể là bạn loại bỏ tham số cho tha thực thể và lấy tên thay vì từ clazzname. điều này sẽ dẫn đến việc sử dụng:
[ClazzName deleteAllFromEntity];
một hàm sạch hơn (như thể loại cho 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
Việc sử dụng sau đó:
[managedObjectContext deleteAllFromEntity:@"EntityName"];