在每个 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
的访问。
【问题讨论】:
不要自己调用数据源方法numberOfSections
和numberOfRows(inSection:
。从数据源数组中获取信息,实际上是数据源方法中返回的值。而不是重复循环,而是使用map
和reduce
将值相加或使用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 中的 UIImageView/UIButton?
Swift 春季动画在 UITableViewCell 上无法正常工作