将sqlite db重置为默认值

时间:2012-11-11 21:42:33

标签: ios iphone sqlite reset nsfilemanager

我正在我的应用程序中编写一个重置函数,它将使用一些预先填充的数据将我的sqlite数据库恢复到其原始状态。下面的代码从文档目录中删除数据库,并从数据库中复制数据库,但数据仍然显示在旧数据库中?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"MoneyMonthly.sqlite"];

 if([[NSFileManager defaultManager] fileExistsAtPath:filePath]){ 

    [[NSFileManager defaultManager]      removeItemAtPath:filePath error:nil]; 

}

BOOL success; 
NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error;

NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"MoneyMonthly.sqlite"]; 
 NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"MoneyMonthly.sqlite"]; 

 success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; 

if (!success) {

    NSAssert1(0, @"Failed to create writable   database file with message '%@'.", [error localizedDescription]); 
}

2 个答案:

答案 0 :(得分:2)

只需关闭现有的sqlite数据库,然后再次从包中复制它,覆盖现有数据库。这将基本上与您第一次复制它时的方式相同。

答案 1 :(得分:2)

我在其中一个应用中执行此操作。我在我的应用程序包中保留了一个预先构建的数据库文件。该数据库包含所有表和样本数据。

当我需要重置用户的数据库时,我将其关闭,然后使用捆绑包中的干净副本覆盖数据库。