2011-01-23 112 views
3

我刚开始使用iOS编程,非常感谢您提前给予的耐心和帮助。 我是一个具有名为“value”的属性(float)的实体“Expense”。我有一个tableView填充形式coreData与NSFetchedResultsController。 我试图在标签(或表头)中显示所有“费用”的“值”的总和,但在阅读Apple Docs和搜索不同的论坛后,我无法实施解决方案。肯定是初学者迷失方向。 欣赏任何关于实现这个操作之王的最佳方式的迹象,或任何类似的显示类似解决方案的代码。首先是总结一个CoreData属性

回答

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); 
+0

感谢您抽出一段时间“fluchtpunkt”,并指着方式与货币合作,这将是代码。良好的意见总是欢迎和采取。我的主要问题是如何计算用户可以在TableView中插入的所有费用的“价值”的@Sum,并更准确地将其存储为实体“费用”的“价值”或“金额”属性。我没有找到一种方法来计算CoreData的一个属性的总和。然后,我会在某处显示“总金额”。谢谢 – Diogo 2011-01-23 19:07:19