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

SwiftUI跨窗口共享选中状态时表格数据消失问题求助

问题排查与解决方案

核心问题1:DataSource 实例被意外重建

你在 ContentView 中使用 @ObservedObject var dataSource = DataSource(),这会导致每当 ContentView 因状态变化(比如 testData 的 anOpponentName 更新)重新渲染时,dataSource 会被重新实例化,之前从网络获取的表格数据会丢失,直接表现为表格内容消失。

修复方案

把 ContentView 中的 @ObservedObject 改为 @StateObject,确保 DataSource 实例在 ContentView 生命周期内保持唯一:

struct ContentView: View {
    // 替换 @ObservedObject 为 @StateObject
    @StateObject var dataSource = DataSource()
    
    @ObservedObject var testData: ShareValues
    
    var body: some View {
        // 原有代码不变
    }
}

核心问题2:按钮操作未关联正确的 DataSource 实例

你在按钮点击时每次都会创建新的 ButtonsFuncs 实例:ButtonsFuncs().connectButton(),如果 connectButton() 方法需要操作 dataSource 的数据,当前实现无法将网络获取的数据更新到 ContentView 持有的 dataSource 实例中,会导致数据不同步,甚至触发意外的实例重建。

修复方案

修改 ButtonsFuncs,让它接收 DataSource 作为参数,确保操作的是同一个实例:

// 调整 ButtonsFuncs 结构,传入目标 dataSource
class ButtonsFuncs {
    func connectButton(dataSource: DataSource) {
        // 在这里执行网络请求,并更新 dataSource.tableData
        // 示例:
        // dataSource.tableData = 从网络获取的 Entrant 数组
    }
    
    func disconnectButton(dataSource: DataSource) {
        // 断开连接的逻辑,比如清空数据
        // dataSource.tableData.removeAll()
    }
}

然后在 ContentView 的按钮点击中传入当前的 dataSource:

Button("Connect") {
    ButtonsFuncs().connectButton(dataSource: dataSource)
}

Button("DisConnect") {
    ButtonsFuncs().disconnectButton(dataSource: dataSource)
}

额外优化建议

  1. 统一属性命名风格:Swift 推荐属性名使用小驼峰命名(比如 flags 而非 Flags),保持代码风格一致性:
struct Entrant: Identifiable {
    let id = UUID()
    var flags: String
    var name: String
    var rank: String
    var obs: String
    var pl: String
    var idle: String
}

对应的表格列路径也要同步修改:

TableColumn("Flags", value: \Entrant.flags).width(35)
// 其他列同理修改
  1. 确保 DataSource 正确发布数据更新:DataSource 必须遵循 ObservableObject,并且 tableData 标记为 @Published,这样数据变化时才能通知 SwiftUI 更新视图:
class DataSource: ObservableObject {
    @Published var tableData: [Entrant] = []
    // 其他业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:08:15