保持对象插入NSMutableArray属性

时间:2013-09-29 18:26:06

标签: ios objective-c

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

@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处,这基本上意味着之前的数字已从堆中释放。

2 个答案:

答案 0 :(得分:0)

如果您有NSMutableArray并使用

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

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

如果yopu想要存储全局值,您可以尝试使用NSUserDefaults

答案 1 :(得分: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:)]

通过这种方式,您可以更轻松地解决问题,只需对分数进行排序并获得最高分。