Eine gute Antwort wurde bereits gepostet, dies ist nur eine Empfehlung!
Ein guter Weg wäre, einfach eine Kategorie hinzuzufügen NSManagedObject
und eine Methode zu implementieren, wie ich es getan habe:
Header-Datei (zB NSManagedObject+Ext.h
)
@interface NSManagedObject (Logic)
+ (void) deleteAllFromEntity:(NSString*) entityName;
@end
Codedatei: (zB 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
... das einzige, was Sie tun müssen, ist, den manageObjectContext vom App-Delegaten abzurufen, oder wo jeder, in dem Sie ihn haben;)
danach können Sie es verwenden wie:
[NSManagedObject deleteAllFromEntity:@"EntityName"];
Eine weitere Optimierung könnte darin bestehen, dass Sie den Parameter für den Entitätsnamen entfernen und stattdessen den Namen aus dem Clazznamen abrufen. Dies würde zur Verwendung führen:
[ClazzName deleteAllFromEntity];
ein saubereres Impl (als Kategorie zu 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
Die Verwendung dann:
[managedObjectContext deleteAllFromEntity:@"EntityName"];