gpt4 book ai didi

ios - 将现有 Realm 数据库文件复制到应用程序组位置以进行今天的扩展

转载 作者:行者123 更新时间:2023-12-02 02:52:59 31 4
gpt4 key购买 nike

我的 iOS 应用程序正在使用 Realm 数据库我想将当前的 default.realm 数据库文件复制或移动到新目录(应用程序组位置),以便我可以与 Today Extension 小部件共享它。

我尝试按照这篇文章所说(How to transfer Realm database to appgroups)

核心代码为

let fileManager = FileManager.default
let originalPath = Realm.Configuration.defaultConfiguration.fileURL!
let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.myApp")!.appendingPathComponent("default.realm")
do{
try fileManager.replaceItemAt(appGroupURL, withItemAt: originalPath)
}
catch{
print("Error information: \(error)")
}

我将此代码放入didFinishLaunchingWithOptions内的 Realm 迁移范围内,如下所示为了让您更清楚地了解我在哪里使用此代码。


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
var config = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
let fileManager = FileManager.default
let originalPath = Realm.Configuration.defaultConfiguration.fileURL!
let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.myApp")!.appendingPathComponent("default.realm")
do{
try fileManager.replaceItemAt(appGroupURL, withItemAt: originalPath)
}
catch{
print("Error information: \(error)")
}
}
}
)
}


当我尝试此操作时,我的控制台显示无法保存文件。

错误域=NSCocoaErrorDomain代码=512“文件“default.realm”无法保存在文件夹“2EEADCEE-F9D9-44A8-BDED-B60A689656A2”中。” UserInfo={NSFileOriginalItemLocationKey=文件:///Users/jm/Library/Developer/CoreSimulator/Devices/38334AE3-6648-402E-AC18-8252426002D6/data/Containers/Shared/AppGroup/2EEADCEE-F9D9-44A8-BDED-B60A689656A2/default.realm,……

我听说应该在打开文件之前复制/移动 Realm 数据库文件,这个错误与此相关吗?

感谢您的帮助,祝您有美好的一天

最佳答案

感谢@Jay 的评论,这帮助我找到了方法。

正如他提到的,移动 Realm DB 文件应该在我们调用与 Realm 相关的任何内容之前完成。

最初我在 Realm 迁移中有一段代码,因此当架构版本较旧时它只会运行一次,

但我将其移到了 didFinishLaunchingWithOptions 顶部的外部,因此现在可以将 Realm DB 文件移动到不同的目录。

希望这可以帮助那些正在苦苦挣扎的人。


let fileManager = FileManager.default
let originalPath = Realm.Configuration.defaultConfiguration.fileURL!
let appGroupURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.myApp")!.appendingPathComponent("default.realm")
if fileManager.fileExists(atPath: originalPath.absoluteString) {
do{
try fileManager.replaceItemAt(appGroupURL, withItemAt: originalPath)
print("Successfully replaced DB file")
}
catch{
print("Error info: \(error)")
}
} else {
print("File is not exist on original path")
}


var config = Realm.Configuration(
)
config.fileURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.myApp")!.appendingPathComponent("default.realm")

// Tell Realm to use this new configuration object for the default Realm
Realm.Configuration.defaultConfiguration = config

// Now that we've told Realm how to handle the schema change, opening the file
// will automatically perform the migration
let realm = try! Realm()

关于ios - 将现有 Realm 数据库文件复制到应用程序组位置以进行今天的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61636015/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com