2010-03-02 5 views
0

Je travaille sur ma première application en utilisant coredata. Tout fonctionne parfaitement. Lorsque je débogue l'application sur mon appareil (sans qu'elle soit déjà installée sur l'appareil), puis quittez l'application, modifiez manuellement le sqlite dbase puis déboguez à nouveau l'application, il semble utiliser l'ancienne version de la base de données. Si les deux fichiers sqlite ont le même nom, y a-t-il un moyen de lui dire de simplement remplacer ce qui est là?CoreData a mis à jour la base de données sqlite

Voici un extrait de mon code:

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"mydata.sqlite"]; 

    /* 
    Set up the store. 
    For the sake of illustration, provide a pre-populated default store. 
    */ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    // If the expected store doesn't exist, copy the default store. 
    if (![fileManager fileExistsAtPath:storePath]) { 
     NSLog(@"copying default from sqlite"); 
     NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"mydata" ofType:@"sqlite"]; 
     if (defaultStorePath) { 
      [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL]; 
     } 
    } 


    NSURL *storeUrl = [NSURL fileURLWithPath:storePath]; 

Comme vous pouvez le voir, si elle ne trouve pas la base de données d'abord il charge le fichier SQLite de l'application. En plus de changer le nom du fichier sqlite ou d'utiliser un paramètre, y a-t-il un moyen de dire "flush" tout ce que vous avez si vous avez quelque chose, et recommencer à zéro?

Je suis préoccupé par les utilisateurs qui achètent l'application, puis quand je publie une mise à jour, ils voient encore des données de l'ancienne version de la base de données.

Merci, Howie

+0

"... y a-t-il un moyen de dire ce que vous possédez si vous avez quelque chose, et de recommencer à zéro?" Si ce magasin est en lecture seule, l'utilisateur devra créer un fichier vide données, alors c'est OK. Sinon, c'est vraiment une mauvaise idée. –

Répondre

0

Vous pouvez supprimer l'ancienne base de données et de copier celui qui est livré avec votre mise à jour de la même manière que vous l'avez fait à l'origine.

NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"Test.sqlite"]; 
NSURL *storeURL = [NSURL fileURLWithPath:storePath]; 
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil] 

Vous avez juste besoin d'un moyen de déterminer si la base de données est obsolète.

Questions connexes