UITableView
中的每个单元格都有一个amountValue
值存储在CoreData
中。我的表格视图是一个钱包,因此最后一步是添加每个$
并将总计显示为wallet value
。
我试图在amountValue
中迭代tableView
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)
}
}
}
}
,但没有成功。
以下是我目前的情况:
Thread 1: signal SIGABRT
目前我在App Delegate
上获得amountValue
。
我该怎么做才能解决问题并使计算成为可能?
编辑:进一步测试后,访问SELECT substr(string(DATE),0,8) as daydate, count(1), avg(float(REGEXP_REPLACE(V2Tone, r',.*', ""))) tone
, avg(float(REGEXP_EXTRACT(GCAM, r'v19.1:([-d.]+)'))) anew,sum(integer(REGEXP_EXTRACT(GCAM, r'c8.3:([-d.]+)'))) ridanxietycnt, sum(integer(REGEXP_EXTRACT(GCAM, r'wc:(d+)'))) wordcount
FROM [gdeltv2.gkg]
where V2Locations like '%Turkey%Turkey%'
group by daydate
会导致应用程序崩溃..
答案 0 :(得分:0)
您的代码不是很安全。要避免强行解缠并不困难,你应该从这开始。
例如:
if CoreDataHandler.fetchObject() != nil {
item = CoreDataHandler.fetchObject()!
tableView.reloadData()
}
Aren你丢弃了初始fetchObject()调用的结果吗? 这可以改写为:
if let nextItem = CoreDataHandler.fetchObject() {
item.append(nextItem)
tableView.reloadData()
}
我假设该项目是您的数据源。 [否则重新加载表格视图的调用没有意义]
您提供的下一个代码块也可以重构为更安全。在对其进行任何数学运算之前,请确认您有一个amountValue。
最后,这段代码可能不在你的AppDelegate.swift文件中?你是否从app delegate中调用了这段代码?
你需要把它分解成可管理的块 - 我想你在这里有不止一个问题。
答案 1 :(得分:0)
您只需在项目
上应用 reduce 高阶方法即可let total = item.reduce(Double(0.0)) { (result, nextItem) -> Double in
return result + (nextItem.amountValue!)
}