2015-05-02 99 views
6

最近在應用程序和擴展程序之間共享Realm數據的做法令人興奮。該文檔詳細介紹瞭如何將默認領域設置爲應用程序組目錄,我已經有了這個工作。如何將領域數據庫遷移到應用程序組?

下面是我堅持什麼 - 將舊數據庫傳輸到應用程序組中新位置的最佳方式是什麼?

+0

是否有任何理由不能使用NSFileManager移動文件? – segiddins

+0

Apple建議避免使用文件協調API,因爲數據可能會損壞:https://developer.apple.com/library/ios/technotes/tn2408/_index.html – Whoa

+0

由於只有您的應用可以移動它,並且您可以這樣做原子,你會沒事 – segiddins

回答

7

基於@segiddins評論,我決定去與舊數據庫移動到使用的NSFileManager應用程序組:

let fileManager = NSFileManager.defaultManager() 

    //Cache original realm path (documents directory) 
    let originalDefaultRealmPath = RLMRealm.defaultRealmPath() 

    //Generate new realm path based on app group 
    let appGroupURL: NSURL = fileManager.containerURLForSecurityApplicationGroupIdentifier("group.AppGroup")! 
    let realmPath = appGroupURL.path!.stringByAppendingPathComponent("default.realm") 

    //Moves the realm to the new location if it hasn't been done previously 
    if (fileManager.fileExistsAtPath(originalDefaultRealmPath) && !fileManager.fileExistsAtPath(realmPath)) { 

     var error: NSError? 
     fileManager.moveItemAtPath(originalDefaultRealmPath, toPath: realmPath, error: &error) 

     if (error != nil) { 
      println(error) 
     } 
    } 

    //Set the realm path to the new directory 
    RLMRealm.setDefaultRealmPath(realmPath) 
0

希望這將有助於其他讀者。

https://github.com/realm/realm-cocoa/issues/4490中所述,您可以使用下面的代碼設置應用程序組路徑,並使用文件管理器移動上面提到的現有數據庫。

var config = Realm.Configuration() 
config.fileURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: appGroupIdentifier)!.appendingPathComponent(dbFilename) 
Realm.Configuration.defaultConfiguration = config 
相關問題