在每个 UITableViewCell 单元格中添加每次出现的键

Posted

技术标签:

【中文标题】在每个 UITableViewCell 单元格中添加每次出现的键【英文标题】:Add every occurence of a key in every UITableViewCell's cell 【发布时间】:2018-03-06 16:24:41 【问题描述】:

我的UITableView 中的每个单元格都有一个amountValue 值存储在CoreData 中。我的表格视图是一个钱包,所以最后一步是添加每个 $ 并将总计显示为 wallet value

我正在尝试遍历我的tableView 中出现的每个amountValue,但没有成功。

这是我目前的情况:

func updateWalletValue() 

    // CryptosMO is the Managed Object with an `amountValue` attribute among others.

    var item : [CryptosMO] = []

    if CoreDataHandler.fetchObject() != nil 
        item = CoreDataHandler.fetchObject()!
        tableView.reloadData()
    

    for section in 0...self.tableView.numberOfSections 
        if (self.tableView.numberOfRows(inSection: section) > 0) 
            for row in 0...self.tableView.numberOfRows(inSection: section) 
                let total = item[row].amountValue! + item[row + 1].amountValue!

                print("TOTAL :", total)
            
        
    

现在我在App Delegate 上收到Thread 1: signal SIGABRT

我能做些什么来解决这个问题并使计算成为可能?

编辑:经过进一步测试,导致应用崩溃的是对amountValue 的访问。

【问题讨论】:

不要自己调用数据源方法numberOfSectionsnumberOfRows(inSection:。从数据源数组中获取信息,实际上是数据源方法中返回的值。而不是重复循环,而是使用mapreduce 将值相加或使用NSExpression 获取数据。为了避免崩溃,我建议在 Core Data 模型和 NSManagedObject 子类中声明 amountValue 非可选(默认值为 0.0) 你为什么要迭代表呢?您将数据提供给表,为什么不直接迭代您的数据源? @vadian 似乎我在NSManagedObject subclass 中将amount 声明为string 而不是双精度,但我发现我无论如何都不能将其声明为双精度,必须使用NSNumber。此外,我还看到了如何在 Core-Data 模型中将其声明为非可选,但我无法在窗格中的任何位置为其指定默认值。有一个Validation 选中了default,但值为0,无法更改。 @ghostatron 你是对的!我对表格视图很陌生,并认为这是在正确的 indexPath 处进行迭代的好方法。 【参考方案1】:

您的代码不是很安全。避免强制展开并不难,您应该从这样做开始。

例如:

  if CoreDataHandler.fetchObject() != nil 
        item = CoreDataHandler.fetchObject()!
        tableView.reloadData()
    

您不会丢弃初始 fetchObject() 调用的结果吗? 这可以重写为:

  if let nextItem = CoreDataHandler.fetchObject()  
        item.append(nextItem)
        tableView.reloadData()
    

我假设该项目是您的数据源。 [否则重新加载表格视图的调用毫无意义]

您提供的下一个代码块也可以重构为更安全。在对它进行任何数学运算之前验证你有一个 amountValue。

最后,这段代码大概不在您的 AppDelegate.swift 文件中?您是否从应用委托调用此代码?

您需要将其分解为可管理的部分 - 我认为您在这里有不止一个问题。

【讨论】:

【参考方案2】:

您可以简单地对项目应用 reduce 高阶方法:

let total = item.reduce(Double(0.0))  (result, nextItem) -> Double in
    return result + (nextItem.amountValue!)

【讨论】:

以上是关于在每个 UITableViewCell 单元格中添加每次出现的键的主要内容,如果未能解决你的问题,请参考以下文章

在每个UITableViewCell单元格中添加键的每个出现

UITableViewCell 选择停留在所有单元格中!

如何加快 UITableViewCell 中的 UIImageView/UIButton?

Swift 春季动画在 UITableViewCell 上无法正常工作

如何在ios中的自定义UITableViewCell中添加轮播视图

UITableViewCell 重用和图像重新渲染