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

SwiftData中@Query带#Predicate时返回导航失效问题求助

问题原因与解决方案

核心原因

这是SwiftData在iOS 17早期版本中的已知bug:当@Query使用filter参数进行数据筛选时,会干扰NavigationStack的导航状态管理,导致返回按钮失效或无响应。

你的第二个子视图版本能正常工作,是因为它先通过无过滤的@Query获取全量数据,再在ForEach内部做条件筛选,这种方式没有触发上述bug,NavigationStack能正常跟踪视图的导航状态。

另外也需要确认你的VideoGame模型是否正确遵循Identifiable协议,且id属性是稳定唯一的(比如用@Attribute(.unique)修饰的UUID)——如果模型身份标识不稳定,也可能在带过滤的@Query场景下引发视图标识混乱,间接影响导航功能。

临时修复方案

  1. 暂时使用你第二个版本的写法(ForEach内部筛选)规避bug;
  2. 升级到最新的iOS 17正式版,苹果已修复这类SwiftData与NavigationStack交互的问题;
  3. 在子视图中显式注入ModelContext,确保上下文与父视图一致:
struct FavoritListGameView: View {
    @Environment(\.modelContext) private var modelContext
    @Query(
        filter: #Predicate<VideoGame> {$0.favorite == true},
        sort: [SortDescriptor(\VideoGame.name, order: .forward)]
    )
    var favorites: [VideoGame]
    
    var body: some View {
        List{
            Section("Favories") {
                ForEach(favorites){ fav in
                    Text(fav.name)
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Dimitri Klopfstein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:05:15