0

ゲームのハイスコアを表示するためのアイデアを思いつきました。実際にやろうとしていることは、基本的に に 2 つの数字を追加しNSMutableArray、2 つの数字の間で最大のものをチェックすることです。

@property (strong, nonatomic) NSMutableArray *highscoreArray;

-(void)displaHighScorelabel:(int)score
{
    NSNumber *point = [NSNumber numberWithInt:score];
    [self.highscoreArray addObject:point];
    int highscore = 0;
    if([self.highscoreArray indexOfObject:[self.highscoreArray lastObject]] == 0)
        highscore = [[self.highscoreArray lastObject]integerValue];
    else for(int i=0; i < [self.highscoreArray count];i++)
    {
        if ([self.highscoreArray[i] intValue] >= [self.highscoreArray[i+1] intValue]) {
            [self.highscoreArray removeObjectAtIndex:i+1];
            highscore = [self.highscoreArray[i] intValue];
        }
        else if([self.highscoreArray[i] intValue] <= [self.highscoreArray[i+1] intValue])
        {
            [self.highscoreArray removeObjectAtIndex:i];
            highscore = [self.highscoreArray[i+1] intValue];
        }
    }
    self.highscoreLabel.text = [NSString stringWithFormat:@"High Score: %i",highscore];
    [self CheckSomething:self.highscoreArray];
}

問題は、配列がヒープに 1 つの数値しか保持しないことです。解放せずに保管するにはどうすればよいですか?次に追加する番号はインデックス 0 になるため、基本的には前の番号がヒープから解放されたことを意味します。

4

2 に答える 2

0

あなたが持っていNSMutableArrayて使用する場合

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index

インデックス 0 では、すべてのデータが 1 つ上に移動するので、0 のデータは 1 になります。

yopuがグローバル値を保存したい場合は、使用してみてくださいNSUserDefaults

于 2013-09-29T18:51:25.970 に答える
0

あなたが抱えている可能性のある他の問題は、反復している配列の要素を削除できないことです。

最善の解決策: 新しい一時的な NSMutableArray をローカル変数として作成し、新しいコンテンツに目的のコンテンツを作成します。その後、一時配列を変数に割り当てます。

 NSMutableArray* temporarySortingArray = [NSMutableArray array];
 //do your sorting / removing by iterating through self.highscoreArray and adding results to temporarySortingArray
 self.highscoreArray  = temporarySortingArray;

ところで。この NSArray メソッドを見てください。

 sortedArrayUsingSelector:@selector(compare:)]

これにより、問題をはるかに簡単に解決できます。スコアを並べ替えて、上位のスコアを取得するだけです。

于 2013-09-29T18:52:26.300 に答える