SwiftData/SwiftUI中如何存储文档设置/元数据?兼容旧CoreData文件
背景
我曾开发一款基于CoreData的文档类应用,每个文档对应特定年份和州/省,因此将年份和位置信息以文档为单位存储在CoreData模型外。我通过NSPersistentStore访问文档的元数据字典实现该功能。
具体代码如下:
class Document: NSPersistentDocument { //other let/var here var persistentStore: NSPersistentStore? { if let stores = self.managedObjectContext?.persistentStoreCoordinator?.persistentStores { if stores != [] { return stores[0] } } return nil } @objc dynamic var documentYear = 2011 { didSet { setMetaData(documentYear as AnyObject, forKey: "year") } } @objc dynamic var documentProvince = 3 { didSet { setMetaData(documentProvince as AnyObject, forKey: "province") } } func setMetaData(_ object: AnyObject, forKey key: String) { if persistentStore != nil { var metadataDict = persistentStore!.metadata if metadataDict?[key] == nil || (metadataDict?[key] as! NSNumber) != (object as! NSNumber) { metadataDict?[key] = object persistentStore!.metadata = metadataDict updateChangeCount(.changeDone) } } } func getMetaData() { if persistentStore != nil { let metadataDict = persistentStore!.metadata if metadataDict?["year"] != nil { documentYear = metadataDict?["year"] as! Int } if metadataDict?["province"] != nil { documentProvince = metadataDict?["province"] as! Int } } } //other code here }
我知道这段代码不够简洁,但这不是重点。
问题
现在要将应用升级到SwiftData,同时希望兼容旧文档(尽管只有我自己使用该程序)。
我未找到SwiftData/SwiftUI中与NSPersistentStore对应的相关文档,这意味着我无法从旧文件中读取元数据,也无法用之前的方法在SwiftUI版本中创建新文档文件。SwiftData文档中仅提及持久化模型本身的元数据,这对我的需求没有帮助。
另外,我不清楚如何在SwiftUI中继承持久化文档类,即便有NSPersistentStore的替代方案,CoreData版本中使用的方法也无法生效。此外,若无法继承文档类,即便我愿意放弃旧文件兼容性,也找不到存储文档设置的替代位置(在Persistent Store之外)。
问询
能否在SwiftData/SwiftUI中使用文档设置或元数据?如果可以,具体如何实现?是否有办法访问旧CoreData文件中的Persistent Store元数据?或者该功能目前暂未支持,需等待今年WWDC,我的应用迁移到SwiftData的计划是否需要推迟?
内容的提问来源于stack exchange,提问作者LighteningKid
相关产品推荐
相关产品推荐

