SwiftData更新ModelContainer后出现偶发崩溃及CoreData校验和警告的问题求助
各位好,我在SwiftData的版本化Schema和ModelContainer配置上遇到了问题,想请大家帮忙看看:
首先说下我的基础情况:我在App里有这些SwiftData模型:[SDPlanBrief.self, SDAirport.self, SDChart.self, SDIndividualRunwayAirport.self, SDLocationBrief.self],其中SDLocationBrief和SDChart之间存在@Relationship关联。
版本化Schema的配置演变
最开始上线App时我没有做版本化Schema,后来因为需要给@Model模型新增字段,不得不切换到版本化Schema方案。
- 最初的第一个版本化Schema我只加了修改过的模型:
static var models: [any PersistentModel.Type] { [SDPlanBrief.self] }
这时候我的ModelContainer还是用全量模型列表初始化,一直工作正常:
.modelContainer(for: [SDAirport.self, SDIndividualRunwayAirport.self, SDLocationBrief.self, SDChart.self, SDPlanBrief.self])
后来我了解到版本化Schema应该包含所有@Model模型,于是把版本化Schema的models改成了全量:
static var models: [any PersistentModel.Type] { [SDPlanBrief.self, SDAirport.self, SDChart.self, SDIndividualRunwayAirport.self, SDLocationBrief.self] }
ModelContainer的修改
同时我也调整了ModelContainer的创建方式,适配版本化Schema的使用,改成用actor来管理容器初始化:
actor ModelContainerActor { @MainActor static func container() -> ModelContainer { let schema = Schema( versionedSchema: AllSwiftDataSchemaV3.self ) let configuration = ModelConfiguration() let container = try! ModelContainer( for: schema, migrationPlan: PlanBriefMigrationPlan.self, configurations: configuration ) return container } }
然后在App入口这样传入容器:
.modelContainer(ModelContainerActor.container())
当前遇到的问题
现在每次运行App,都会连续多次弹出这条CoreData错误日志:
CoreData: error: Attempting to retrieve an NSManagedObjectModel version checksum while the model is still editable. This may result in an unstable verison checksum. Add model to NSPersistentStoreCoordinator and try again.
更严重的是,TestFlight上的用户会出现偶发崩溃,尤其是在视图快速加载的场景(比如关闭订阅视图,可能数据还未完全加载完成时),我猜测这和@Query的访问逻辑有关。
我本身对SwiftData的掌握还比较浅,实在摸不清问题根源,希望有经验的朋友能帮我分析下原因,或者给点解决方向?
内容来源于stack exchange

