You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:17:06