2010-10-19 7 views
2

J'ai une application iphone qui utilise une base de données SQLite, tout fonctionne et je peux enregistrer la base de données dans le fichier et le charger lorsque l'application est rechargée. Mais le problème que je suis est que je ne sais pas comment je peux effacer la base de données et recommencer à zéro. J'ai essayé de supprimer le fichier de base de données, ce qui entraînera le démarrage d'une nouvelle base de données à partir de zéro au prochain redémarrage de l'application, mais je voudrais savoir comment ne pas supprimer le fichier de base de données mais aussi effacer Il manque de mémoire tous ensemble et démarrer une nouvelle base de données sans avoir besoin de redémarrer l'application.iphone - comment effacer la base de données SQLite?

Répondre

0

Alors, vous souhaitez supprimer tous les fichiers * .sqlite? Il n'y a aucun moyen d'éviter la boucle, mais vous pouvez le limiter en utilisant un prédicat pour filtrer les fichiers non-SQL d'abord et assurer des performances rapides en utilisant l'énumération rapide. Voici une méthode pour le faire:

-(void) removeAllSQLiteFiles  
{ 
    NSFileManager *manager = [NSFileManager defaultManager]; 

    // the preferred way to get the apps documents directory 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    // grab all the files in the documents dir 
    NSArray *allFiles = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil]; 

    // filter the array for only sqlite files 
    NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.sqlite'"]; 
    NSArray *sqliteFiles = [allFiles filteredArrayUsingPredicate:fltr]; 

    // use fast enumeration to iterate the array and delete the files 
    for (NSString *sqliteFile in sqliteFiles) 
    { 
     NSError *error = nil; 
     [manager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:sqliteFile] error:&error] 
     NSAssert(!error, @"Assertion: SQLite file deletion shall never throw an error."); 
    } 
} 
Questions connexes