248 votes

Supprimer/réinitialiser toutes les entrées de base de données ?

Vous connaissez une façon de supprimer toutes les entrées stockées dans la base de données ? Mon schéma devrait rester le même ; Je veux juste remettre à blanc.


Edit

Je suis à la recherche pour ce faire par programme afin qu’un utilisateur peut frapper essentiellement un `` bouton.

202voto

groundhog Points 3550

Vous pouvez toujours supprimer le fichier par programmation, à l'aide de la NSFileManager:removeItemAtPath:: méthode.

NSPersistentStore *store = ...;
NSError *error;
NSURL *storeURL = store.URL;
NSPersistentStoreCoordinator *storeCoordinator = ...;
[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

Ensuite, il suffit d'ajouter le système de persistance en arrière pour s'assurer qu'il est recréé correctement.

Un moyen pour itérer sur chaque entité est à la fois plus lente et sujette à l'erreur. L'utiliser pour faire de cette façon, si vous voulez supprimer des entités et pas d'autres. Cependant, vous devez toujours assurez-vous de conserver l'intégrité référentielle ou vous ne serez pas en mesure de persister vos modifications.

Juste de retirer le stocker et de le recréer à la fois rapide et sûr, et peut certainement être fait par programmation à l'exécution.

Mise à jour pour iOS5+

Avec l'introduction de l'externe stockage binaire (allowsExternalBinaryDataStorage ou Magasin en Externe Fichier d'Enregistrement) dans iOS 5 et mac OS X 10.7, il vous suffit de supprimer les fichiers pointés par storeURLs n'est pas assez. Vous allez quitter l'externe d'enregistrement des fichiers de derrière. Depuis le schéma de nommage de ces fichiers d'enregistrement n'est pas public, je n'ai pas de solution universelle encore. – an0 8 Mai '12 à 23:00

142voto

Grouchal Points 7053

Vous pouvez supprimer le fichier sqllite - mais j’ai choisi de le faire en purgeant les tableaux individuellement avec des fonctions :

La raison pour laquelle que j’ai choisi de le faire table par table, c’est que ça me fait confirmer que j’ai fais la programmation que le fait de supprimer le contenu de la table est raisonnable et il n’y a pas de données que je préfère garder.

Ce faisant il s’est beaucoup plus lent que de simplement supprimer le fichier et je vais changer pour une suppression de fichier si j’ai cette méthode prend trop de temps.

40voto

samvermette Points 20225

J’ai écrit une `` méthode qui passe par chaque magasin et supprimez-le aussi bien par le coordonnateur et le système de fichiers (gestion des erreurs laissée de côté) :

Cette méthode est à l’intérieur d’un `` classe qui prend soin de (entre autres) de créer le persistentStore lorsqu’il est nul.

27voto

atreat Points 1434

J'ai supprimer toutes les données de base de données sur un bouton de l'Événement dans un HomeViewController classe: Cet article m'a aidé tellement j'ai pensé contribuer.

-(IBAction)buttonReset:(id)sender
{
    NSLog(@"buttonReset Pressed");

    //Erase the persistent store from coordinator and also file manager.
    NSPersistentStore *store = [self.persistentStoreCoordinator.persistentStores lastObject];
    NSError *error = nil;
    NSURL *storeURL = store.URL;
    [self.persistentStoreCoordinator removePersistentStore:store error:&error];
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];


    NSLog(@"Data Reset");

    //Make new persistent store for future saves   (Taken From Above Answer)
    if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        // do something with the error
    }

}

Notez que pour faire un appel à l'auto.persistentStoreCoordinator j'ai déclaré une propriété dans la Maison-Vue-Contrôleur. (Ne vous inquiétez pas au sujet de la managedObjectContext que j'utilise pour la sauvegarde et le chargement.)

@property (nonatomic, retain) NSManagedObjectContext        *   managedObjectContext;
@property (nonatomic, retain) NSPersistentStoreCoordinator  *   persistentStoreCoordinator;

Puis dans l'AppDelegate ApplicationDidFinishLaunching juste en dessous de la création d'un HomeViewController j'ai :

homeViewController = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
homeViewController.managedObjectContext = self.managedObjectContext;
homeViewController.persistentStoreCoordinator = self.persistentStoreCoordinator;

19voto

Brian King Points 1461

MagicalRecord , c’est très facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X