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

Xcode 12 Swift 5 如何保存TableView单元格的Checkmark勾选状态

解决方案

你现有代码的核心逻辑已经完全覆盖了勾选状态持久化的需求,只需要补全两处遗漏即可正常运行:

1. 确认ShoppingList模型遵守Codable协议

你的持久化逻辑用了JSON编解码,需要确保模型符合协议要求,示例定义如下:

struct ShoppingList: Codable {
    let itemName: String
    var checkmarkState: Bool = false // 新增条目默认未勾选
}

如果之前没有加Codable遵守声明,JSON编解码会静默失败,导致数据无法持久化。

2. 清空列表方法补全save调用

你现有的clearList()方法只清空了数组、刷新了列表,没有调用持久化逻辑,修改为:

@objc func clearList() {
    shoppingList.removeAll(keepingCapacity: true)
    save() // 新增这行,同步清空本地存储
    tableView.reloadData()
}

可选优化点

你在didSelectRowAt里直接操作cell的accessoryType是可以的,更严谨的写法是只改数据源,然后刷新对应行,避免cell复用带来的异常:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    shoppingList[indexPath.row].checkmarkState.toggle()
    save()
    tableView.reloadRows(at: [indexPath], with: .automatic)
}

修改完成后,勾选状态会跟着条目数据一起保存在UserDefaults中,应用重启后会自动读取展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:57:01