我在该课程中有一个名为storeScores
的单身人士,我有一个分数NSMutableArray
。我想找到高分(这是数组中最低的浮点数)并使用我的viewController打印它。我正在调用此方法来对数组进行排序并获取其中的最小数字。
-(NSString*)getHighscore{
NSMutableArray *scores2 = _scores;
NSString *highest;
float highScore;
NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
[scores2 sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]];
highScore = [[scores2 firstObject]floatValue];
highest = [NSString stringWithFormat:@"%.02f",highScore];
return highest;
}
当我这样做时,我看到' 0.00'在标签上。当我执行highScore = [[scores2 objectAtIndex:0]floatValue];
而不是highScore = [[scores2 firstObject]floatValue];
时,应用程序崩溃了。有什么问题?
答案 0 :(得分:1)
来自the documentation。 firstObject
:
返回值
数组中的第一个对象。如果数组为空, 返回nil。
objectAtIndex:
:
返回值
对象位于索引。讨论
如果索引超出了数组的末尾(即索引 大于或等于count)返回的值,a 引发了NSRangeException。
因此,唯一可以解释您所看到的不同行为的事情是:数组在索引0处没有对象。它是空的。
添加NSLog
_scores
或scores2
进行确认。
答案 1 :(得分:0)
为了更好地对阵列进行排序,我建议你这样做:
- (NSNumber*)getHighscore{
if(_scores.count >= 1) {
float minValue = MAXFLOAT; // minValue = highest score
for (NSNumber *number in _scores) {
float x = number.floatValue;
if (x < minValue) minValue = x;
}
return [NSNumber numberWithFloat:minValue];
}
else
return nil;
}
使用这样的方法:
NSLog(@"Lowest value (highest score): %@", [[self getHighscore] stringValue]);