2011-02-18 93 views
4

將其作爲資源添加後,數據庫文件本身位於項目根目錄中。如何在iPhone項目中指定sqlite數據庫的路徑?

我只能通過指定OS X看到它的完整路徑打開它,即「/ Users/Louis/Documents/Test Project/test.db」。

但是當然iPhone上沒有這樣的路徑。

我認爲我應該將路徑定義爲「application root/test.db」,但我不知道如何,或者如果它甚至可以在我的開發機器以外的其他地方工作。

感謝您的任何想法。

+0

注意的是,在編譯的應用程序包路徑將不會與您的項目中相同。代碼和資源進入單獨的目錄。這就是爲什麼你應該使用`NSBundle`方法來解析路徑。 – 2011-02-18 15:14:52

回答

8

要獲取您在XCode中添加的文件的路徑,您需要在mainBundle中使用pathForResource:ofType:。

NSString *path = [[NSBundle mainBundle] pathForResource:@"yourDb" ofType:@"sqlite"]; 

但是,您不能更改mainBundle中的文件。所以你必須將它複製到另一個位置。例如到您的應用程序庫。

你可以做這樣的:

NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]; 
NSString *targetPath = [libraryPath stringByAppendingPathComponent:@"yourDB.sqlite"]; 

if (![[NSFileManager defaultManager] fileExistsAtPath:targetPath]) { 
    // database doesn't exist in your library path... copy it from the bundle 
    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"yourDb" ofType:@"sqlite"]; 
    NSError *error = nil; 

    if (![[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:targetPath error:&error]) { 
     NSLog(@"Error: %@", error); 
    } 
} 
+0

謝謝你,它有幫助!你在那裏說了一堆。我是否正確理解,如果不先將它複製到庫路徑之類的地方,我就無法寫入數據庫?如果是這樣,只要應用程序安裝,它會留在那裏嗎?另外,如果數據庫預填充,我想這會增加一倍的足跡? – Louis 2011-02-18 16:05:29

+2

您無法更改軟件包中的任何內容,因此您可以將在xcode中添加的所有文件視爲只讀文件。並且數據庫將保留在庫目錄中,直到用戶刪除您的應用程序。它也將包含在itunes的備份中。因此,如果用戶切換到新設備,並且從他的備份中恢復,那麼您的數據庫將會在那裏。 – 2011-02-18 17:12:19

+0

有趣的,很高興知道。 – Louis 2011-02-19 19:47:35

相關問題