我刚刚开始使用iOS编程,非常感谢您提前耐心和帮助.我是一个实体"Expense",其属性(float)称为"value".我有一个tableView填充表单coreData与NSFetchedResultsController.我试图在标签(或表格标题)中显示所有"费用"的"值"的总和,但在阅读Apple Docs并在Google上搜索不同的论坛后,我无法实现解决方案.肯定是初学者迷失方向.欣赏有关实施此操作之王的最佳方法的任何迹象,或任何显示类似解决方案的代码.
首先.如果要计算和存储货币,则应使用Decimal(nsdecimalnumber的核心数据名称)和NSDecimalNumber.我用float实现了你需要的代码.但是你应该把它改成NSDecimalNumber.阅读本文,了解为什么要这样做
如果要将费用值添加到节标题中,则很容易.你基本上花费了部分中所有对象的费用并总结了它.
- (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];
}
Run Code Online (Sandbox Code Playgroud)
即使你不使用表中的部分,这也行.但是你应该改变返回的字符串.
我想你应该能够理解它.还有一种更通用的方法可以做到这一点.我为你写了一点点冗长.它在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);
Run Code Online (Sandbox Code Playgroud)
没有太多解释.
编辑:如果您使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2590 次 |
| 最近记录: |