2012-11-11 41 views
3

我在我的應用程序中編寫了一個重置​​函數,它將使用某些預先填充的數據將我的sqlite數據庫恢復到其原始狀態。下面的代碼將從數據庫目錄中刪除數據庫並從數據包複製數據庫,但數據仍舊從舊數據庫中出現?將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

我在我的一個應用程序中執行此操作。我將預構建的數據庫文件保存在我的應用程序包中。該數據庫包含所有表格和示例數據。

當我需要重置用戶的數據庫時,我關閉它,然後用包中的乾淨副本覆蓋數據庫。

2

只需關閉現有的sqlite數據庫,然後再次從包中複製它,覆蓋現有的數據庫。這將基本上與第一次複製時的方式相同。

+0

謝謝,我正在關閉我的數據庫後嘗試以下: 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]; } – Carl

+0

BOOL成功; NSFileManager * fileManager = [NSFileManager defaultManager]; NSError *錯誤; NSString * writableDBPath = [documentsDirectory stringByAppendingPathComponent:@「MoneyMonthly.sqlite」]; NSString * defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@「MoneyMonthly.sqlite」]; success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; (0,@「無法創建包含消息'%@'的可寫數據庫文件」,[error localizedDescription]); } – Carl

+0

而且,它工作嗎?如果沒有,告訴我們錯誤信息是什麼,我們會盡力幫助。此外,如果您將代碼添加到您的**問題**中,並將其格式化爲代碼,那麼它將更具可讀性,並且每個人都會看到它並能夠提供幫助。 – lnafziger