swift - 如何将 Core Data 的数据迁移到 App Group 的数据
问题描述
我刚刚App Groups
使用这个StackOverFlow 帖子添加到我的应用程序中。不幸的是,由于defaultDirectoryURL
正在更改,我无法获取在使用 App Groups 目录之前创建的任何旧数据。我知道数据仍然存在,因为当我切换回使用常规NSPersistentContainer
而不是 时GroupedPersistentContainer
,我可以获得数据。
如何将旧数据迁移到获取应用组数据的位置?
核心数据代码:
class CoreDataManager {
static let sharedManager = CoreDataManager()
private init() {}
lazy var persistentContainer: NSPersistentContainer = {
var useCloudSync = UserDefaults.standard.bool(forKey: "useCloudSync")
let containerToUse: NSPersistentContainer?
if useCloudSync {
containerToUse = NSPersistentCloudKitContainer(name: "App")
} else {
containerToUse = GroupedPersistentContainer(name: "App")
let description = containerToUse!.persistentStoreDescriptions.first
description?.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey)
}
guard let container = containerToUse, let description = container.persistentStoreDescriptions.first else {
fatalError("Hey Listen! ###\(#function): Failed to retrieve a persistent store description.")
}
description.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey)
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
...
return container
}
}
GroupedPersistentContainer 代码:
class GroupedPersistentContainer: NSPersistentContainer {
enum URLStrings: String {
case group = "group.App"
}
override class func defaultDirectoryURL() -> URL {
let url = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: URLStrings.group.rawValue)
if !FileManager.default.fileExists(atPath: url!.path) {
try? FileManager.default.createDirectory(at: url!, withIntermediateDirectories: true, attributes: nil)
}
return url!
}
}
我还没有为我的 NSPersistentCloudKitContainer 完成此操作,但它将遵循与此相同的格式。
解决方案
推荐阅读
- oracle11g - Oracle触发器防止指定值写入列
- delphi - Delphi翻译项目EResNotFound
- c# - string.Contains 作为谓词而不是函数调用?
- intellij-idea - IntelliJ 识别类但“无法访问类”
- swift - @objc 关键字扩展子类行为
- macos - 部署错误:Tomcat 启动失败(Netbeans +Mac OS)
- javascript - 正确的登录页面模式
- ant - 使用 if with resourcecontains in 并且不返回真值
- javascript - 堆积图 - AmChart - Javascript
- css - 将整个博客和侧边栏居中(Wordpress 主题)