求和CoreData属性

Dio*_*ogo 3 core-data

我刚刚开始使用iOS编程,非常感谢您提前耐心和帮助.我是一个实体"Expense",其属性(float)称为"value".我有一个tableView填充表单coreData与NSFetchedResultsController.我试图在标签(或表格标题)中显示所有"费用"的"值"的总和,但在阅读Apple Docs并在Google上搜索不同的论坛后,我无法实现解决方案.肯定是初学者迷失方向.欣赏有关实施此操作之王的最佳方法的任何迹象,或任何显示类似解决方案的代码.

Mat*_*uch 8

首先.如果要计算和存储货币,则应使用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)