valueForKeyPath sum并不返回正确的值

时间:2015-10-05 08:18:37

标签: objective-c

我在一个类中编写一个方法,该类返回grades的所有元素的总和,NSDecimalNumbers的(私有实例)NSMutableArray

grades = [[NSMutableArray alloc] init];

我收到的字符串格式为"(长度) - (值)(值)..."
(例如:"3 - 90.5 85.2 89.6"
这就是我填充数组的方法

-(void) setGrades: (NSString *) list{
     NSArray *arr = [list componentsSeparatedByString:@" "];

     int i = 2; //start from 2 to ignore length and '-'
     for (; i<[arr count]; i++)
     {
         NSString *temp = [arr objectAtIndex:i];
         [grades addObject: [NSDecimalNumber decimalNumberWithString: temp]];
     }
}

总和方法

-(double) getSum{
     double sum = [[grades valueForKeyPath:@"@sum.doubleValue"]doubleValue];
     return sum;
}

返回完全不正确的内容。例如,使用上面的示例数据,它返回0。或者,如果我删除最后一个值(因此它将是"2 - 90.5 85.2"),它将返回-1717986918。我填充数组或其他方式的错误是什么?我该如何解决?

2 个答案:

答案 0 :(得分:1)

在你的这种方法中

-(void) setGrades: (NSString *) list{
 NSArray *arr = [list componentsSeparatedByString:@" "];

 int i = 2; //start from 2 to ignore length and '-'
 for (; i<[arr count]; i++)
 {
     NSString *temp = [arr objectAtIndex:i];
     [grades addObject: [NSDecimalNumber decimalNumberWithString: temp]];
 }

}

不要将其转换为NSDecimalNumber并将其以字符串格式添加到数组中。并确保你已经为成绩数组分配了内存。

grades = [[NSMutableArray alloc]init];

然后在这个方法中

    -(double) getSum{
     double sum = [[grades valueForKeyPath:@"@sum.doubleValue"]doubleValue];
     return sum;
}

做这样的事情:

-(double) getSum{

double sum = 0;
for(int i = 0; i< grades.count; i++){
    sum += [[NSString stringWithFormat:@"%@",[grades objectAtIndex:i]]doubleValue];
}
return sum;

}

希望这会对你有所帮助。

答案 1 :(得分:0)

最好选择一种类型并坚持下去。

NSDecimal:

[grades addObject:[NSDecimalNumber decimalNumberWithString: temp]];

NSDecimalNumber *sum = [grades valueForKeyPath:@"@sum.self"];

双:

[grades addObject:[NSNumber numberWithDouble:[temp doubleValue]]];

double sum = [[grades valueForKeyPath:@"@sum.self"] doubleValue];

的NSString:

[grades addObject:temp];

NSString *sum = [grades valueForKeyPath:@"@sum.self"];