0

我想出了一个显示游戏高分的想法,而我实际上想要做的基本上是将两个数字添加到 anNSMutableArray并检查两个数字之间的最大值,阵列中最大的停留在另一个必须删除。

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

问题是:数组在堆中只保留一个数字。我怎样才能保留它而不释放它?由于我要添加的下一个数字将位于索引 0 处,这基本上意味着前一个数字已从堆中释放。

4

2 回答 2

0

如果你有一个NSMutableArray并使用

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

在索引 0 处,所有数据将向上移动 1 个位置,因此 0 中的 1 将位于 1 中。

如果你想存储全局值,你可以尝试使用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 回答