Realm Swift中使用@Persisted关联子对象失败问题求助
问题原因与解决方案
核心问题是DataModel中的child列表未使用@Persisted修饰,Realm不会持久化未标记@Persisted的属性,所以你添加的子对象只存在于内存中,不会写入数据库。
你之前尝试@Persisted var child: List<ChildModel>报错,大概率是ChildModel本身未正确配置为Realm持久化对象,而非DataModel的问题。
修正步骤
1. 正确配置DataModel的子对象列表
必须用@Persisted修饰List类型属性,且无需手动初始化(Realm会自动处理):
class DataModel: Object { @Persisted(primaryKey: true) var id: UUID @Persisted var title: String = "" @Persisted var child: List<ChildModel> // 移除手动初始化代码 }
2. 确保ChildModel是合法的Realm对象
所有需要持久化的属性都要加@Persisted,且类必须继承Object:
class ChildModel: Object { @Persisted var childStr: String = "" // 可选:如果需要主键,可添加@Persisted(primaryKey: true) var id: UUID }
3. 处理Schema迁移(调试阶段可选)
如果之前已经运行过旧版本代码,需要让Realm更新数据结构。调试时最简单的方式是删除App后重新安装;正式环境则需要配置Realm迁移。
验证
修改完成后重新运行代码,执行createChild后,getData就能正确输出子对象数量和内容了。
内容的提问来源于stack exchange,提问作者Gilbert Nicholas
相关产品推荐
相关产品推荐

