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

Firestore求和异常:TableView滑动时累计值重复叠加问题求助

问题根源分析
  1. 变量未重置:totalVotes作为类成员变量,每次触发Firestore请求时不会自动归零,滑动TableView导致cell复用、重复请求时,会在之前的总和基础上持续累加。
  2. 错误的赋值时机:在遍历文档的循环中直接给cell标签赋值,且请求逻辑放在cell配置流程(如cellForRowAt)里,导致滑动时重复发起请求、重复累加。
修复方案

步骤1:重构数据获取与总和计算逻辑

将Firestore请求移至页面初始化阶段(如viewDidLoad),避免滑动时重复请求;计算总和前先重置累加变量,确保每次计算从0开始。

修正后代码示例

首先在类中定义存储总和的变量:

var totalQuantitySum: Double = 0.0

然后在页面初始化时获取数据并计算总和:

override func viewDidLoad() {
    super.viewDidLoad()
    // 其他初始化代码
    fetchTotalQuantity()
}

func fetchTotalQuantity() {
    db.collection("Admin").document("AI智能機器人").collection("Ai日獲利")
        //.order(by: "date", descending: true)
        //.whereField("date", isGreaterThanOrEqualTo: dateStr)
        //.whereField("date", isLessThanOrEqualTo: date3)
        .getDocuments() { [weak self] (snapshot, error) in
            guard let self = self, let snapshot = snapshot, !snapshot.documents.isEmpty else {
                return
            }
            
            // 计算前重置总和为0
            self.totalQuantitySum = 0.0
            
            for document in snapshot.documents {
                if let quantity = document.data()["quantity"] as? Double {
                    self.totalQuantitySum += quantity
                }
            }
            
            // 计算完成后刷新TableView,更新cell显示
            self.tableView.reloadData()
        }
}

步骤2:在cell配置方法中直接使用预计算的总和

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "你的Cell标识符", for: indexPath) as! 你的Cell类
    
    // 直接用预计算好的总和设置标签
    cell.nowq8.text = "+" + String(format: "%.4f", totalQuantitySum) + "%"
    
    return cell
}

关键修复点

  • 把数据请求从cell配置逻辑中剥离,避免滑动触发重复请求。
  • 每次计算总和前重置累加变量,确保计算起点正确。
  • 计算完成后刷新TableView,让所有cell同步显示正确的总和值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:25:23