首先。如果要计算和存储货币,则应该使用 Decimal (nsdecimalnumber 的核心数据名称)和 NSDecimalNumber。
我用 float 实现了您需要的代码。但你确实应该将其更改为 NSDecimalNumber。读this https://stackoverflow.com/questions/421463/should-i-use-nsdecimalnumber-to-deal-with-money知道为什么你应该这样做
如果您想将费用值添加到节标题中,这很容易。基本上,您会计算该部分中所有对象的费用并对其进行总结。
- (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);