SwiftData Query按timestamp排序未达预期问题求助
问题原因与解决方案
核心问题
你在ExperienceContentView中虽然通过@Query配置了带排序规则的查询,但视图渲染时用的是experience.content(关联对象的原始集合),而非经过@Query排序后的content变量,导致排序规则没有生效。
修复步骤
替换List的数据源
将List(experience.content)改为List(content),直接使用@Query返回的已排序数组:var body: some View { List(content) { content in // 替换experience.content为content Section( content: { switch content.details { case .a0(let text): Text(text) case .a1(var image): EmptyView() case .a2(_): EmptyView() } }, header: { Text("TODO") }, footer: { Text(content.subContent) } ) } // 其余代码保持不变 }可选:调整排序方向
如果需要按时间倒序展示(最新内容在前),可以给SortDescriptor添加order参数:sortBy: [ SortDescriptor(\ExperienceContent.timestamp, order: .reverse) ]确认关联关系正确性
确保Experience模型中与ExperienceContent的双向关联定义正确,示例如下:@Model class Experience { @Attribute(.unique) let id: UUID @Relationship(inverse: \ExperienceContent.experience) var content: [ExperienceContent] = [] // 其他属性与初始化方法 }
验证
修改完成后添加新记录,视图会自动按照timestamp的排序规则展示内容,与数据库中存储的时间戳顺序一致。
内容的提问来源于stack exchange,提问作者Blacksmith
相关产品推荐
相关产品推荐

