Une bonne réponse a déjà été postée, ce n'est qu'une recommandation !
Une bonne façon de procéder serait d'ajouter une catégorie à l'adresse suivante NSManagedObject
et implémenter une méthode comme je l'ai fait :
Fichier d'en-tête (par exemple NSManagedObject+Ext.h
)
@interface NSManagedObject (Logic)
+ (void) deleteAllFromEntity:(NSString*) entityName;
@end
Fichier de code : (par exemple, 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
... la seule chose à faire est de récupérer le managedObjectContext du délégué de l'application, ou de tout autre endroit où il se trouve ;)
ensuite vous pouvez l'utiliser comme :
[NSManagedObject deleteAllFromEntity:@"EntityName"];
une optimisation supplémentaire pourrait consister à supprimer le paramètre pour l'entityname et à obtenir le nom à partir du clazzname. cela conduirait à l'utilisation :
[ClazzName deleteAllFromEntity];
un impl plus propre (comme catégorie de 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
L'usage alors :
[managedObjectContext deleteAllFromEntity:@"EntityName"];
1 votes
Vous pourriez utiliser une base de données en mémoire