2010-07-23 176 views
0

我有一個問題,我無法讓我的sqlite數據庫工作/在iPad設備上打開。一切工作正常在模擬器上,但不是一個真正的設備。當我想在設備上測試時,我將MODE設置爲NO,但無法加載。sqlite在模擬器上工作,但不在設備上

sqlite3 *database; 
if (MODE) { //Simulator 
    result = sqlite3_open("/Users/userID/Myapp/VRdb.sqlite", &database); 
} else { // On device 
    result = sqlite3_open([databasePath UTF8String], &database); 
} 

if(result != SQLITE_OK) 
{ 
    sqlite3_close(database); 
    view = [[UIAlertView alloc] 
      initWithTitle: @"Database Error" 
      message: @"Failed to open database." 
      delegate: self 
      cancelButtonTitle: @"OK" otherButtonTitles: nil]; 
    [view show]; 
    [view autorelease]; 

} 

databasePath通過以下步驟獲得:

databasePath = [[一個NSBundle mainBundle] pathForResource:@ 「VRDB」 ofType:@ 「源碼」];

有什麼,我錯過了嗎?

回答

4

實際上是否有一個文件在該路徑?儘管sqlite3_open()函數會在文件不存在的情況下創建文件,但不能在應用程序包內部創建文件(權限)。該文件實際上必須已經存在,並在構建時作爲資源複製到捆綁包中,然後用作模板以複製到可寫區域(如文檔文件夾)。

(感謝彼得促使我實現我的答案是不完整的:-))

+0

awlcs:最好的辦法,如果你打算創建一個可寫的數據庫,將得到的路徑文件目錄並使用它。你可以並且應該無條件地做到這一點,而不管你是否在模擬器上運行。事實上,我建議不要在模擬器行爲和設備行爲之間產生比你面對的更多的差異。 – 2010-07-24 02:50:12

+0

感謝你們兩位,我會試一試。我認爲使用NSBundle就足夠了,但我錯了:) – awlcs 2010-07-26 07:28:11

相關問題