显示从最高到最低的分数

时间:2011-06-08 04:37:20

标签: iphone cocoa-touch sorting nsarray

我的分数显示的顺序不正确。我一直在努力制作一个使用@selector(compare:)的方法,但却没有运气。

这是我正在使用的代码,我想要从最高到最低显示它。我也想拥有它,这样如果你第一次加载应用程序就会创建一个空数组,这样如果用户试图查看高分数,它就不会使应用程序崩溃。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *scoresListPath = [documentsDirectory stringByAppendingPathComponent:@"scores.plist"];

scoresList = [[NSMutableArray arrayWithContentsOfFile:scoresListPath] retain];

if (scoresList == nil) {
    scoresList = [[NSMutableArray array] retain];
}

- (void)addHighScore:(float)finalScore {
    [scoresList addObject:[NSNumber numberWithFloat:finalScore]];

    [scoresList sortUsingSelector:@selector(compare:)];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *scoresListPath = [documentsDirectory stringByAppendingPathComponent:@"scores.plist"];
    [scoresList writeToFile:scoresListPath atomically:YES];
}

2 个答案:

答案 0 :(得分:0)

您的代码失败的原因是因为arrayWithContentsOfFile:返回不可变数组,即使它在NSMutableArray上调用。你应该像你一样制作一个你读过文件的数组的可变副本,

scoresList = [[NSArray arrayWithContentsOfFile:scoresListPath] mutableCopy];

这将为您提供一个NSMutableArray对象,可以将其添加到。

答案 1 :(得分:0)

不确定最低但是,您可以使用GK LeaderBoard ViewController类来计算最高分数。有关详细信息,我建议您阅读以下链接。谢谢

http://developer.apple.com/library/ios/#documentation/GameKit/Reference/GKLeaderboardViewController_Ref/Reference/Reference.html