关闭SwiftUI Sheet时触发Realm迁移错误问题咨询
问题解答
为什么同步Realm增量变更会要求迁移
同步 Realm 理论上新增可选字段、带默认值的必填字段这类增量变更无需执行本地迁移,你遇到的报错是两个原因共同导致的:
- 你手动给
ObservedResults传入了自定义的Realm.Configuration,和同步会话自动生成的配置参数不一致,触发了本地 schema 校验逻辑的误判 - 你使用的 Realm Cocoa 10.5.1 版本存在已知的 SwiftUI 组件缺陷,
ObservedResults初始化时未正确继承同步 Realm 免迁移增量变更的校验规则,当父视图在 sheet 关闭后重绘、重新初始化ObservedResults时,就会抛出迁移要求的错误。
调整方案
- 第一步:移除所有
ObservedResults中手动传入的configuration参数,同步 Realm 的配置由同步会话自动管理,手动指定schemaVersion反而会造成配置冲突,你加的那行配置本身是冗余的,还会加剧问题。 - 第二步:检查新增字段的模型定义:可选类型可直接新增,必填类型必须指定默认值(比如
@Persisted var visible = false),符合增量变更的要求。 - 第三步:优先将 Realm Cocoa 版本升级到 10.10.0 及以上,该版本已经修复了
ObservedResults相关的 schema 校验 Bug,升级后即可正常兼容免迁移的增量变更。 - 如果你暂时无法升级版本,可以在 App 启动、同步用户登录完成后,将同步用户生成的 Realm 配置设置为全局默认配置:
Realm.Configuration.defaultConfiguration = user.flexibleSyncConfiguration(),后续所有ObservedResults统一使用全局默认配置,避免不同视图的配置不一致触发校验错误。
是否属于Bug
你当前使用的 10.5.1 版本中的该问题属于已知 Bug,是 SwiftUI 相关组件的校验逻辑不完善导致的,高版本已完成修复。
内容的提问来源于stack exchange,提问作者Kurt
相关产品推荐
相关产品推荐

