คำตอบที่ดีถูกโพสต์แล้วนี่เป็นเพียงคำแนะนำ!
วิธีที่ดีคือเพิ่มหมวดหมู่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
... สิ่งเดียวที่คุณต้องมีคือการได้รับการจัดการ ObjectContext จากตัวแทนแอพหรือที่ที่คุณมีทุกอย่างในนั้น;)
หลังจากนั้นคุณสามารถใช้งานได้เช่น:
[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"];