最近在應用程序和擴展程序之間共享Realm數據的做法令人興奮。該文檔詳細介紹瞭如何將默認領域設置爲應用程序組目錄,我已經有了這個工作。如何將領域數據庫遷移到應用程序組?
下面是我堅持什麼 - 將舊數據庫傳輸到應用程序組中新位置的最佳方式是什麼?
最近在應用程序和擴展程序之間共享Realm數據的做法令人興奮。該文檔詳細介紹瞭如何將默認領域設置爲應用程序組目錄,我已經有了這個工作。如何將領域數據庫遷移到應用程序組?
下面是我堅持什麼 - 將舊數據庫傳輸到應用程序組中新位置的最佳方式是什麼?
基於@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)
希望這將有助於其他讀者。
如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
是否有任何理由不能使用NSFileManager移動文件? – segiddins
Apple建議避免使用文件協調API,因爲數據可能會損壞:https://developer.apple.com/library/ios/technotes/tn2408/_index.html – Whoa
由於只有您的應用可以移動它,並且您可以這樣做原子,你會沒事 – segiddins