2015-06-29 1 views
0

Для моего высокого балла мне нужно отобразить место в верхнем байте на ярлыке до начала сортировки.сравнить NSInteger с отсортированным NSIntegerArray objectAtIndex

Так у меня есть highscoreArray на каждом objectAtIndex это имя, и точки, сохраненные как это:

2015-06-29 03:08:34.159 Game[3408:838910] (
    { 
    name = "TEST-TES"; 
    points = 250; 
}, 
    { 
    name = EEE; 
    points = 180; 
}, 
    { 
    name = HHHHH; 
    points = 90; 
}, 
    { 
    name = "ADTES"; 
    points = 70; 
}, 
    { 
    name = EE; 
    points = 70; 
}, 
    { 
    name = AAAAAAAAAAAAAAA; 
    points = 70; 
}, 
    { 
    name = TEEEST; 
    points = 40; 
}, 
    { 
    name = R; 
    points = 20; 
}, 
    { 
    name = er; 
    points = 20; 
}, 
    { 
    name = test1; 
    points = 20; 
} 
) 

Так что теперь, например, я закончил игру и получил 100 баллов. Я получу 3-е место.

Как я могу сравнить свою оценку с highscoreArray и отобразить на этикетке номер объектаAtIndex? (В этом примере: 100 точек будет находиться в диапазоне от objectAtIndex: 1 и 2, так что я должен быть третье место.)

РЕДАКТИРОВАТЬ:

пытался:

@property (nonatomic) NSMutableArray *highscoreindex; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
_highscoreindex = [defaults objectForKey:@"highscore"]; 
NSLog(@"%@", _highscoreindex); 


int i; 
UIColor *color = [UIColor blackColor]; 
for (i = 0; i < [_highscoreindex count]; i++) { 
    [_highscoreindex objectAtIndex:i]; 

    if ([_highscoreindex objectAtIndex:0 < self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"1"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 

    } 
    if ([_highscoreindex objectAtIndex:0 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"2"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 

    } 
    if ([_highscoreindex objectAtIndex:1 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"3"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 
    if ([_highscoreindex objectAtIndex:2 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"4"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 
    if ([_highscoreindex objectAtIndex:3 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"5"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 
    if ([_highscoreindex objectAtIndex:4 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"6"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 
    if ([_highscoreindex objectAtIndex:5 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"7"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 
    if ([_highscoreindex objectAtIndex:6 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"8"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 
    if ([_highscoreindex objectAtIndex:7 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"9"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 
    if ([_highscoreindex objectAtIndex:8 > self.score]) { 
     _highscoreIndexLabel.text = [NSString stringWithFormat:@"10"]; 
     [_highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [_highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [_highscoreIndexLabel setTextColor:color]; 
    } 

} 
+0

Вы должны перебирать массив, сравнивая значение в каждой словарной записи разорвать петлю в соответствующей точке , Можете ли вы показать код, который вы пробовали? – Paulw11

+0

Вы должны передать переменную i в objectAtIndex: вместо 0,1,2 ... и ваш блок «больше ли это?»? код должен быть записан только один раз в теле цикла. То, как это происходит сейчас, поскольку в массиве много элементов, он будет сравнивать первые 9 элементов массива с self.score и многократно менять метку. –

ответ

2

i представляет собой индекс, который итерации через ваш массив, поэтому вам не нужны все отдельные операторы if. Обратите внимание, что я предположил, что на самом деле содержит highscoreindexNSNumber потому, что вы не можете хранить NSInteger с в массиве

@property (nonatomic) NSMutableArray *highscoreindex; 

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
self.highscoreindex = [defaults objectForKey:@"highscore"]; 

int i; 
UIColor *color = [UIColor blackColor]; 
for (i = 0; i < self.highscoreindex.count; i++) { 
    NSDictionary *highScoreDict=(NSDictionary *)self.highscoreindex[i] 
    NSInteger highScore=[(NSNumber *)highScoreDict[@"points"] integerValue]; 
    if (self.score > highScore) { 
     self.highscoreIndexLabel.text = [NSString stringWithFormat:@"%d",i+1]; 
     [self.highscoreIndexLabel setTextAlignment:NSTextAlignmentCenter]; 
     [self.highscoreIndexLabel setFont:[UIFont fontWithName:@"DINAlternate-Bold" size:80]]; 
     [self.highscoreIndexLabel setTextColor:color]; 
     break; 
    } 
} 
+0

Мне всегда нравятся ваши ответы – soulshined

+0

спасибо, но я получаю эту ошибку: 2015-06-29 12: 12: 45.132 Игра [17906: 585056] - [__ NSCFDictionary integerValue]: непризнанный селектор отправлен в пример 0x7feba0707a70 2015-06-29 12 : 12: 45.156 Игра [17906: 585056] *** Завершение приложения из-за неотображенного исключения «NSInvalidArgumentException», причина: '- [__ NSCFDictionary integerValue]: непризнанный селектор, отправленный в экземпляр 0x7feba0707a70' – iOSBeginner

+0

Я думаю, проблема в том, что в _highscoreIndex есть на каждое имя и точки объектаAtIndex, поэтому он не может сравниться? – iOSBeginner

Смежные вопросы