將其作爲資源添加後,數據庫文件本身位於項目根目錄中。如何在iPhone項目中指定sqlite數據庫的路徑?
我只能通過指定OS X看到它的完整路徑打開它,即「/ Users/Louis/Documents/Test Project/test.db」。
但是當然iPhone上沒有這樣的路徑。
我認爲我應該將路徑定義爲「application root/test.db」,但我不知道如何,或者如果它甚至可以在我的開發機器以外的其他地方工作。
感謝您的任何想法。
將其作爲資源添加後,數據庫文件本身位於項目根目錄中。如何在iPhone項目中指定sqlite數據庫的路徑?
我只能通過指定OS X看到它的完整路徑打開它,即「/ Users/Louis/Documents/Test Project/test.db」。
但是當然iPhone上沒有這樣的路徑。
我認爲我應該將路徑定義爲「application root/test.db」,但我不知道如何,或者如果它甚至可以在我的開發機器以外的其他地方工作。
感謝您的任何想法。
要獲取您在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);
}
}
謝謝你,它有幫助!你在那裏說了一堆。我是否正確理解,如果不先將它複製到庫路徑之類的地方,我就無法寫入數據庫?如果是這樣,只要應用程序安裝,它會留在那裏嗎?另外,如果數據庫預填充,我想這會增加一倍的足跡? – Louis 2011-02-18 16:05:29
您無法更改軟件包中的任何內容,因此您可以將在xcode中添加的所有文件視爲只讀文件。並且數據庫將保留在庫目錄中,直到用戶刪除您的應用程序。它也將包含在itunes的備份中。因此,如果用戶切換到新設備,並且從他的備份中恢復,那麼您的數據庫將會在那裏。 – 2011-02-18 17:12:19
有趣的,很高興知道。 – Louis 2011-02-19 19:47:35
不要只使用SQLite API,使用這個驚人的包裝被稱爲FMDB:https://github.com/ccgus/fmdb
注意的是,在編譯的應用程序包路徑將不會與您的項目中相同。代碼和資源進入單獨的目錄。這就是爲什麼你應該使用`NSBundle`方法來解析路徑。 – 2011-02-18 15:14:52