2012-11-11 52 views
4

我的應用程序使用核心數據。我已經成功創建並填充了相應的sqlite文件的模擬器中運行應用程序。我現在想把這個預先存在的sqlite文件放到一個實際的設備上,併成爲我的應用程序的一部分。我找到了模擬器生成的sqlite文件/ Library/Application Support/iPhone Simulator/6.0/Applications/identifier/Documents/myapp.sqlite並將其拖放到Xcode中。這已經將它添加到我的應用程序包中,但沒有添加到適當的目錄中(結果是可以讀取但不能寫入sqlite文件)。如何將預先存在的sqlite文件放入<Application_Home>/Library /?

從閱讀有關文件系統我認爲,把sqlite的文件最好的地方將是下APPLICATION_HOME /庫/自定義目錄「數據庫」。我似乎無法在Xcode中執行此操作,儘管搜索我無法弄清楚如何執行以下操作:

(1)在Application_Home/Library /?中創建一個名爲'Database'的子目錄。 (2)將sqlite文件傳輸到我新創建的'Database'目錄中?

非常感謝@ Daij-Djan低於他的答案。

另一個問題:永久存儲協調器將使用sqlite文件的路徑。現在根據sqlite文件的大小,複製或移動可能需要一段時間。如何確保@ Daij-Djan提供的示例代碼在持久存儲協調器嘗試引用sqlite文件之前執行並完成?

感謝您提前提供任何幫助。

回答

4

模擬代碼

在appDidFinishLaunching ..也許

dbpath = PATH_YOU_WANT 
if(!file.exists_at:dbpath) { 
    copy(dbinbundle, dbpath); 
} 
在objC

: (書面直列,錯別字/錯誤的機會)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions 
{ 
    NSString *lib = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    NSString *dbs = [lib stringByAppendingPathComponent:@"Database"]; 
    NSString *file = [dbs stringByAppendingPathComponent:@"db.sqlite"]; 
    if(![[NSFileManager defaultManager] fileExistsAtPath:file]) { 

     id dbInBundle = [[NSBundle mainBundle] pathForResource:@"db" ofType:@"sqlite"]; 

     [[NSFileManager defaultManager] createDirectoryAtPath:dbs withIntermediateDirectories:YES attributes:nil error:nil]; 
     [[NSFileManager defaultManager] copyItemAtPath:dbInBundle toPath:file error:nil]; 
    } 
    .... 
} 
+0

如果OP不知道如何在'Library'中創建一個子目錄,以及如何在那裏複製一個默認的數據庫,那麼這個僞代碼可能無濟於事。 –

+1

@MartinR夠了,編輯回答並附加了代碼 –

+0

嘿所有!非常感謝。我是iOS新手。我已經開始從添加的僞代碼開始研究它。我認爲我可以在Xcode中做到這一點,並沒有意識到它必須以編程方式完成。另一件事:永久存儲協調器將使用sqlite文件的路徑。現在根據sqlite文件的大小,複製或移動可能需要一段時間。如何確保在持久存儲協調器嘗試引用sqlite文件之前執行並完成了上述示例代碼? –

相關問題