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

Swift中跨ViewController传递数组时collCells为何为空?

解决ViewController间数组传递为空的问题

看起来你遇到的核心问题是items2数组的内容没能正确传递到另一个ViewController的collCells数组里,我来帮你排查几个常见的坑:

1. 检查数据传递的时机和方式

你现在只展示了didSelectRowAt里添加元素到items2并保存的代码,但关键的传递逻辑没看到。如果是通过Segue跳转,你需要在prepare(for:sender:)方法里给目标VC的collCells赋值:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "YourSegueIdentifier" {
        guard let targetVC = segue.destination as? TargetViewController else { return }
        // 直接传递当前的items2数组
        targetVC.collCells = self.items2
        // 如果依赖本地存储,这里可以触发目标VC读取数据的方法
        // targetVC.loadSavedData()
    }
}

如果是通过代码初始化目标VC,也要确保在push/present之前赋值:

let targetVC = TargetViewController()
targetVC.collCells = self.items2
navigationController?.pushViewController(targetVC, animated: true)

2. 验证saveData2()和读取逻辑是否正确

你调用了saveData2(),但另一个VC是否正确读取了保存的数据?比如如果用UserDefaults保存,要确保读取的key和保存的一致:

// 保存的示例(假设Item实现了Codable)
func saveData2() {
    do {
        let data = try JSONEncoder().encode(items2)
        UserDefaults.standard.set(data, forKey: "SavedItems2")
    } catch {
        print("保存失败:\(error)")
    }
}

// 目标VC读取的示例
func loadSavedData() {
    guard let data = UserDefaults.standard.data(forKey: "SavedItems2") else {
        collCells = []
        return
    }
    do {
        collCells = try JSONDecoder().decode([Item].self, from: data)
    } catch {
        print("读取失败:\(error)")
        collCells = []
    }
}

可以在保存后打印items2.count,再在目标VC的viewDidLoad里打印collCells.count,确认数值是否匹配。

3. 检查Item的类型和分支逻辑

  • 如果Item是struct(值类型),items2.append(items[indexPath.row])添加的是副本,这没问题,但要确认是否进入了append的分支——比如items[indexPath.row].checked一开始是不是true,导致代码没执行添加操作?可以在didSelectRowAt里加打印:
    print("当前选中元素的checked状态:\(items[indexPath.row].checked)")
    print("添加后items2的数量:\(items2.count)")
    
  • 如果Item是class(引用类型),要注意是否有意外修改导致数据变化,但这一般不会直接导致数组为空。

4. 确认跳转时items2的实际状态

在跳转前(比如prepare方法里)加个打印:

print("准备传递的items2数量:\(items2.count)")

如果这里打印是0,那说明didSelectRowAt里的逻辑没有正确向items2添加元素,需要回头检查条件判断是否符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 07:04:07