我想出了一个显示游戏高分的想法,我实际上要做的是基本上将两个数字添加到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处,这基本上意味着之前的数字已从堆中释放。
答案 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:)]
通过这种方式,您可以更轻松地解决问题,只需对分数进行排序并获得最高分。