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

SwiftUI中Accessing StateObject未挂载视图错误的解决求助

问题解决思路与修改后的代码

错误原因分析

  1. init()中访问@FetchRequest变量:@FetchRequest依赖SwiftUI视图的环境上下文,视图初始化阶段(init())还未完成环境注入,此时访问teamsListe会触发错误——无法正确关联到视图的CoreData上下文,每次访问都会创建新实例。
  2. 上下文混用:删除操作同时使用了单例的DataController.shared.context和视图的viewContext,两个上下文实例不一致,导致数据更新后无法同步到@FetchRequest的结果集,出现添加团队不显示的问题。

修改后的代码

import SwiftUI
import CoreData

struct View_Teams: View {
    @Environment(\.managedObjectContext) var viewContext
    @FetchRequest(sortDescriptors: []) var teamsListe: FetchedResults<Team>
    
    var body: some View {
        NavigationStack { // iOS 15及以下替换为NavigationView
            List {
                ForEach(teamsListe) { team in
                    NavigationLink(destination: View_TeamsDetail(passedTeam: team)) {
                        Text(team.bezeichnung ?? "Error")
                    }
                }.onDelete(perform: deleteTeam)
            }
            .navigationTitle("Teams")
            .toolbar {
                ToolbarItem(placement: .navigationBarTrailing) {
                    NavigationLink(destination: View_TeamsDetail(passedTeam: nil)) {
                        Text("add team")
                    }
                }
            }
            .onAppear {
                // 视图加载完成后再访问FetchRequest结果
                print("teamsListe has got \(teamsListe.count) teams")
            }
        }
    }
    
    private func deleteTeam(offsets: IndexSet) {
        withAnimation {
            offsets.map { teamsListe[$0] }
                .forEach(viewContext.delete) // 使用视图绑定的上下文
            do {
                try viewContext.save() // 直接保存当前上下文
            } catch {
                print("删除团队失败:\(error.localizedDescription)")
            }
        }
    }
}

关键修改点

  • 移除init()方法,将打印逻辑移到.onAppear中,确保视图完成环境注入后再访问teamsListe。
  • 删除操作统一使用视图的viewContext,不再依赖单例上下文,保证数据更新能实时同步到列表。
  • 调整"add team"按钮到导航栏工具栏,符合SwiftUI导航布局规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:13:24