0

スコア ボードを並べ替えようとしていますが、スコア ボードは名前で並べ替えられていますが、スコアで並べ替えたい (高から低) スコアはこれを解決するのに役立ちます。プレイヤー名とスコアの詳細を 1 つのラベルに保存しました。
助けてください よろしくお願いします

asd 45 asd 66 rrr 55 tes 42

みたいに見せたい

asd 66 rrr 55 asd 45 tes 42

-(void)btnSaveScore
{
    if(!dictWinData)
        dictWinData = [[NSMutableDictionary alloc] init];


    array = [[NSMutableArray alloc] init];
    array = [[[NSUserDefaults standardUserDefaults] valueForKey:@"ScoreName"] mutableCopy];
    if([array count] == 0)
    {
        array = [[NSMutableArray alloc] init];
    }

    NSString *strName = [NSString stringWithFormat:@"%@",strNameOFPlayer];
    NSString *strScore = [NSString stringWithFormat:@"%@",[NSString stringWithFormat:@"%d",iTap]];
    int intScore = iTap;
    NSLog(@"iTap data is:--> %d",intScore);

    if([strNameOFPlayer length]==7)
        [array addObject:[NSString stringWithFormat:@"%@                   %@",strName,strScore]];
    else if ([strNameOFPlayer length] == 6)
        [array addObject:[NSString stringWithFormat:@"%@                     %@",strName,strScore]];
    else if ([strNameOFPlayer length] == 5)
        [array addObject:[NSString stringWithFormat:@"%@                       %@",strName,strScore]];
    else if ([strNameOFPlayer length] == 4)
        [array addObject:[NSString stringWithFormat:@"%@                         %@",strName,strScore]];
    else if ([strNameOFPlayer length] == 3)
        [array addObject:[NSString stringWithFormat:@"%@                           %@",strName,strScore]];
    else if ([strNameOFPlayer length] == 2)
        [array addObject:[NSString stringWithFormat:@"%@                             %@",strName,strScore]];
    else if ([strNameOFPlayer length] == 1)
        [array addObject:[NSString stringWithFormat:@"%@                              %@",strName,strScore]];


    NSSortDescriptor *sorter = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
    NSArray *sorters = [[NSArray alloc] initWithObjects:sorter, nil];
    [sorter release];
    NSArray *sortedArray = [array sortedArrayUsingDescriptors:sorters];
    [sorters release];


    NSUserDefaults *dfltsData = [NSUserDefaults standardUserDefaults];
    [dfltsData setObject:sortedArray forKey:@"ScoreName"];
    //        [dfltsData setObject:array forKey:@"ScoreCard"];
    [dfltsData synchronize];

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
                                                    message:@"Score is saved."
                                                   delegate:self
                                          cancelButtonTitle:@"Ok"
                                          otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
}
4

1 に答える 1

3

ここでは、文字列 (名前とスコアを含む) を配列に追加しています。代わりに、名前 (NSString*) とスコア (NSNumber*) メンバーを持つモデル クラスを作成し、それらを配列に追加します。

並べ替えには、

NSArray *sortedArray = [yourUnsortedArray sortedArrayUsingComparator: ^(id obj1, id obj2) {

    if ([[obj1 score] integerValue] > [[obj2 score] integerValue]) {
        return NSOrderedDescending;
    }

    if ([[obj1 score] integerValue] < [[obj2 score] integerValue]) {
        return NSOrderedAscending;
    }
    return NSOrderedSame;
}];
于 2012-09-06T07:04:43.623 に答える