2015-11-13 36 views
0

我正在使用XCode 6.4和iOS Si,mulator iPhone 6.我的應用程序數據庫或表的每次運行都被重新創建,因此我丟失了以前插入的所有數據。我有1個數據庫裏面有1個表。數據庫文件位於項目的Supporing Files目錄中。這裏是數據庫初始化代碼:iOS模擬器重新創建sql數據庫/表

BOOL success; 
    NSString *databasePath = [[NSBundle mainBundle] pathForResource:@"signals" ofType:@"sql"]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    success = [fileManager fileExistsAtPath:databasePath]; 
    if (success) { 
     NSLog(@"exists"); 
     return; 
    } else { 
     NSLog(@"No file found"); 
     [fileManager copyItemAtPath:databasePath toPath:databasePath error:nil]; 
    } 

在運行 - 成功變量是YES - 所以我看到日誌「存在」。之後,我插入一個項目到我的表,並做選擇查詢,返回插入原始這一個。在下一次運行中,我應該看到兩行,但只有一行 - 所以我假設表被重新創建。我需要這個問題的幫助。

+0

什麼是'[文件管理copyItemAtPath:databasePath toPath:databasePath錯誤:零];'怎麼辦呢?你只是錯過了從你的應用程序包複製數據庫文件到你的應用程序的文檔目錄(它保留了應用程序更新) – luk2302

回答

0

沒有足夠的聲望發表評論,但如果你沒有收到任何沒有找到文件消息在你的日誌中,那麼我不認爲這是導致問題的代碼塊。你確實在做插入查詢到數據庫中,而不是更新?另外,是你的選擇查詢返回所有行,而不僅僅是一個。您是通過XCode運行還是直接在模擬器?如果你只是經過那裏運行它的XCode可能覆蓋文件 - 嘗試重新運行在模擬器上的應用程序(CMD + + ^h才能到主屏幕),如果眼見有什麼區別。

+0

感謝回答!我只是從模擬器重新運行應用程序,一切正常。看起來XCode是有罪的。如果您知道如何爲每個新的XCode運行保存數據庫 - 我會很高興!但你已經幫了我很多了!謝謝。 –

0

這不是模擬器或Xcode中的錯誤。您的應用程序中有一個錯誤,而不是模擬器本身。您不應該在此位置修改數據庫:

[[NSBundle mainBundle] pathForResource:@"signals" ofType:@"sql"]; 

這不會在應用程序的更新期間持續存在。在設備上更新應用時,您會看到相同的問題。

相反,使用一個持久位置,如:

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documents = [directories firstObject];