我有一个使用 SwiftData 的现有应用程序,现在需要添加需要访问此数据的扩展。
我尝试使用应用程序组,它将共享数据,但这意味着现有安装的数据将不再可用。
有什么方法可以在保留(或至少以某种方式迁移)现有数据的同时使其仍然可用吗?
我也遇到了同样的问题,解决方法如下: 首先,找到老店:
guard let legacyStoreURL = FileManager.default
.urls(for: .applicationSupportDirectory, in: .userDomainMask)
.first?
.appendingPathComponent(databaseFileName) else {
return
}
数据库名称通常是
default.store
接下来,使用旧商店的位置配置创建一个模型容器:
let legacyConfig = ModelConfiguration(url: legacyStoreURL)
let legacyContainer = try ModelContainer(for: dataSchema, configurations: [legacyConfig])
之后,应该就很简单了。您可以使用任何逻辑从新的 (appGroup) 存储(如果有)获取数据。然后,只需将旧存储中的数据插入到新存储中即可。
最后,如果您不再需要旧商店,可以将其删除:
FileManager.default.removeItem(at: legacyStoreURL
)