如何添加NSMutableArray的总和

3
每当有杀敌事件发生时,尝试累加得分,并每次添加5分。但是,该代码未能正确地累加分数,导致即使进行了更多的杀敌,得分仍然停留在5分。以下是我的数组代码。
        NSMutableArray * scoreTally = [NSMutableArray array];
        NSNumber *scoreValue = [NSNumber numberWithInteger:5];
        [scoreTally addObject:scoreValue];

        int sum=0;
        for(int x=0; x < [scoreTally count]; x++)
        {
            sum += [[scoreTally objectAtIndex:x] intValue];
        }

        NSLog(@"SUM %D",sum);

        score.text = [NSString stringWithFormat:@"Score: %d",sum];
2个回答

7
只需从您的方法中删除此行,并将其放置在-viewDidLoad中。
NSMutableArray * scoreTally = [NSMutableArray array];

建议:我注意到您的代码中使用了for循环来计算总和。有一种更好的方法来计算数组中所有值的总和,这被称为KVC

int sum = [scoreTally valueForKeyPath:@"@sum.self"];

KVC最好的部分在于它非常简单易用,将代码行数减少到一行,从而节省时间。


1
简洁明了,给你点赞。 - Michael Dautermann
这个神奇的“@sum.self”是什么?还有其他类似的吗?有文档资料吗? - James Webster
1
或者我可以自己谷歌一下!这里有一些文档 - James Webster
@JamesWebster:谢谢。我会把你的链接加入到我的回答中。 - Bhavin
键值编码编程指南:集合运算符:http://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/KeyValueCoding/Articles/CollectionOperators.html - user836263

1
这是因为您不断重新创建“scoreTally”数组,因此它不断被重置为一个只有一个NSNumber对象的数组。
您需要仅在创建时创建“scoreTally”数组,然后随着得分的增加添加其他对象。
因此,我建议将“scoreTally”创建移动到其他位置,例如视图控制器的“viewDidLoad”方法(通过ivar或属性保留“scoreTally”)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接