【问题标题】:Displaying a name with a highscore (iPhone app)显示具有高分的名称(iPhone 应用程序)
【发布时间】:2011-06-18 16:19:22
【问题描述】:

我想做的是在我的分数列表中添加一个名字。到目前为止,我有一个名称被保存为 NSString,我的得分被保存为一个整数,稍后我将希望将这些从高到低(分数)排序。下面是我的代码,它将分数作为整数保存到 plist 中,然后在我的高分视图中,我从 plist 中调用该分数并显示它。我想我需要使用 NSDictionary 来保存名称的字符串和分数的整数。这是我卡住的地方,如果有人可以提供帮助,将不胜感激。

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];
}

【问题讨论】:

    标签: string plist nsdictionary


    【解决方案1】:

    您的基本想法是正确的,但您所要做的就是保存一个 NSDictionaries 数组,而不是只保存一个 NSNumber 数组。

    所以保持 NSMutableArray 的原样,并简单地添加分数:

    NSDictionary *score = [NSDictionary dictionaryWithObjectAndKeys: theName, @"name", [NSNumber numberWithFloat:finalScore], @"finalScore", nil];
    [scoresList addObject: score];
    

    scoreList 仍然会正确地写出它的 plist,因为 NS[Mutable]Array 包含只包含数字和字符串的字典,并且这些字典知道如何将自己写出到 plist(请参阅 NSCoder)。

    当你读回你的数组时,-objectAtIndex:i 将是一个 NSDictionary,你可以使用 -objectForKey:@"name" 获取名称,使用 -objectForKey:@"finalScore" 获取分数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2015-06-13
      • 2017-05-10
      • 1970-01-01
      相关资源
      最近更新 更多