【发布时间】: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处进行迭代的好方法。
标签: ios swift function uitableview core-data