我刚刚开始使用iOS编程,非常感谢您提前耐心和帮助。 我是一个实体“Expense”,其属性(float)称为“value”。我有一个tableView填充表单coreData与NSFetchedResultsController。 我试图在标签(或表格标题)中显示所有“费用”的“值”的总和,但在阅读Apple Docs并在Google上搜索不同的论坛后,我无法实现解决方案。肯定是初学者迷失方向。 欣赏有关实施此操作之王的最佳方法的任何迹象,或任何显示类似解决方案的代码。
答案 0 :(得分:8)
首先。如果要计算和存储货币,则应使用Decimal(nsdecimalnumber的核心数据名称)和NSDecimalNumber。 我用float实现了你需要的代码。但是你应该把它改成NSDecimalNumber。阅读this以了解您应该这样做的原因
如果要将费用值添加到节标题中,则很容易。你基本上花费了部分中所有对象的费用并总结了它。
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
float expense = 0;
for (NSManagedObject *object in [sectionInfo objects]) {
expense += [[object valueForKey:@"expense"] floatValue];
}
return [NSString stringWithFormat:@"%@ [Expense: %f]", [sectionInfo name], expense];
}
即使你不使用表中的部分,这也行。但是你应该改变返回的字符串。
我认为你应该能够理解它。还有一种更通用的方法可以做到这一点。我为你写了一点点冗长。它在for循环中使用3行而不是1行,但它完全相同。
float expense = 0;
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
NSNumber *objectExpenseNumber = [object valueForKey:@"expense"];
float objectExpense = [objectExpenseNumber floatValue];
expense = expense + objectExpense;
}
NSLog(@"Expense: %f", expense);
没有太多解释。
编辑:如果您使用NSDecimalNumber
,这将是代码NSDecimalNumber *expense = [NSDecimalNumber decimalNumberWithString:@"0"];
for (NSManagedObject *object in [self.fetchedResultsController fetchedObjects]) {
NSDecimalNumber *objectExpenseNumber = [object valueForKey:@"expense"];
expense = [expense decimalNumberByAdding:objectExpenseNumber];
}
NSLog(@"Expense: %@", expense);