可能是我做错了吗?

因此,我只有几个实体具有“商店-> amountIncome和-> amountExpense”的关系

我正在尝试计算总收入和总支出。 我有动态的tabelView

我开始

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

和一些搜索

Shop *shop = nil;
if (self.searchPredicate == nil) {
    shop = [self.fetchedResultsController objectAtIndexPath:indexPath];
}
else {
    shop = [self.fetchedResultsController.fetchedObjects filteredArrayUsingPredicate:self.
            searchPredicate][indexPath.row];
}

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = shop.shopName;

因此,我从我的实体“ Shop”的请求开始(它具有关系-> amountIncome和-> amountExpense

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Shop"
                                          inManagedObjectContext:[self managedObjectContext]];

[fetchRequest setEntity:entity];

我有几家商店,所以我按shopName做谓语

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"shopName = %@", shop.shopName]];
fetchRequest.resultType = NSDictionaryResultType;

毕竟我会做一些计算总和的工作:

NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
expressionDescription.name = @"amountIncome";
expressionDescription.expression = [NSExpression expressionForKeyPath:@"@sum.incomes.amountIncome"];
expressionDescription.expressionResultType = NSDecimalAttributeType;

NSExpressionDescription *expressionDescriptionExpense = [[NSExpressionDescription alloc] init];
expressionDescriptionExpense.name = @"amountExpense";
expressionDescriptionExpense.expression = [NSExpression expressionForKeyPath:@"@sum.expenses.amountExpense"];
expressionDescriptionExpense.expressionResultType = NSDecimalAttributeType;

fetchRequest.propertiesToFetch = @[expressionDescription, expressionDescriptionExpense];

NSError *error = nil;
NSArray *result = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
NSLog(@"%@",result);

if (result == nil)
{
    NSLog(@"Error: %@", error);
}
else
{
    NSNumber *sumOfAmounts = [[result objectAtIndex:0] objectForKey:@"amountIncome"];
    NSNumber *sumOfAmountsExpense = [[result objectAtIndex:0] objectForKey:@"amountExpense"];

    NSString* amount = [NSString stringWithFormat:@"inc %@/ exp %@/ difference",
                        sumOfAmounts, sumOfAmountsExpense];

和我想详细显示的结果TextLabel

    cell.detailTextLabel.text = amount;
}
return cell;

关键是,那个amountIncome计数正确,但是amountExpense计数错误(例如重复计数),我所缺少的是什么,我的错误是什么? PS对不起我的英语;(

===============>>#1 票数:1 已采纳

您是否尝试过KVC?

NSNumber *sumIncome = [allIncomes valueForKeyPath:@"@sum.amountIncome"];
NSNumber *sumExpense = [allExpenses valueForKeyPath:@"@sum.amountExpense"];

  ask by Yuriy translate from so

未解决问题?本站智能推荐:

1回复

使用CoreData关系计算摘要

在我的对象图中,我有一个经典的父/子关系中的两个实体。 每个孩子都有许多属性,但我感兴趣的是一个时间值(存储为NSDate)。 因此,我的父对象具有“摘要”属性,该属性应该是其合并的子级时间值的总和。 简单:每个孩子都存储一段时间,我希望父母显示所有孩子的总和。 我对CoreDa
2回复

核心数据错误

我使用Restkit从服务器映射Json数据,我通过从db获取来显示这些数据。 我的视图中有一个刷新按钮,它再次执行上述操作。 场景:我有两个表Key和Profile,它们有一对一的关系。 我使用以下代码从DB获取数据 上面的数组返回DB中的所有对象。 但是当我检查使用断点时
2回复

使用核心数据从多节表中计算总和

我有一个包含2个部分的UITableView ,每个部分都已获取已添加到Core Data 。 每个部分都有一个称为数量的属性。 我想获得每个部分的总和。 现在,我的代码给了我所有值的总和。 如何修改它以遍历每个部分? 我正在使用Integer 16在两个部分之间添加值。
2回复

核心数据总和关系

我有一个类别实体,有很多费用。 我想获得给定月份中某类别的所有费用总和: - (NSNumber *)totalForMonth:(NSDate *)date { ... NSPredicate *sumPredicate = [NSPredicate predicateWithF
3回复

计算Java Int溢出

是否有一个公式可以计算Java int的溢出量? 示例:如果我将1加到Integer.MAX_VALUE; 答案不是2147483648,而是-2147483648。 问题:如果我想计算大于2 ^ 32的值将打印什么Java,是否有一个简单的数学表达式(理论上的而不是代码中的)?
1回复

千里马:piece ='at总是计算为假

我想区分一个表达式并为结果生成Fortran。 该表达式类似于at(diff(x^2*f(x,y)+y^2*g(x,y),y),x=y) 。 结果包含诸如at(diff(f(x,y),y),x=y) and at(diff(g(x,y),y),x=y) 。 在生成Fortran之前,我
5回复

Java - 计算大数学表达式

我正面临一个场景,生病必须计算一些巨大的数学表达式。 表达式本身很简单,即只有传统的BODMAS基础,但是作为操作数出现的数字非常大,达到1000位数字的调整。 我知道java.math模块的BigInteger类,但我正在寻找一种不同的方式,以便计算也可以快速进行。 我是一个仍然在Jav
1回复

尝试计算具有三个变量的用户输入表达式

我正在尝试编写一个程序,要求用户输入表达式。 规则是它需要在表达式中包含3个变量(x,y,z)。 在程序结束时,它应该计算表达式。 例如,用户可以输入x + y + z的表达式。 甚至可能是14 * 36 / x * 7 * z-96 + 74 * y。 由于我需要用户能够输入
1回复

核心数据中的计算属性

考虑具有两个属性的Core Data实体: text和-为简单起见,使用textLength 。 textLength是每次text更改时都会计算的属性。 我有三个要求: 每次text更改时,最好在NSManagedObject子类内部更新textLength 。 由于性能
3回复

c ++中的算术表达式输入计算

我总是要求用户输入x和y ,然后计算结果。 这是一个非常简单的例子: int main() { int x,y; cout << "Please enter x" <<endl; cin >> x ; cout << "please enter