iOS NSRangeException, Индекс за пределами, NSMutable Array - PullRequest
2 голосов
/ 07 июля 2011

После создания проекта приложения для iPhone мне поручено отлаживать его после обновления.Не объективный программист, я не уверен, с чего начать.Любая помощь будет оценена.

Вот вывод отладки:

2011-07-07 15:27:44.333 App[5836:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSMutableArray objectAtIndex:]: index 6 beyond bounds [0 .. 5]'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x013d0be9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x015255c2 objc_exception_throw + 47
    2   CoreFoundation                      0x013c66e5 -[__NSArrayM objectAtIndex:] + 261
    3   CollegeFootballAlerts               0x00034892 -[SMStandings tableView:cellForRowAtIndexPath:] + 397
    ...
)
terminate called after throwing an instance of 'NSException'

точка останова здесь: teamInfo =:

- (UITableViewCell *)tableView:(UITableView *)tableView1 cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString* cellIdentifier = @"TeamsInfoCell"; 

    SMStandingsTableViewCell * cell = (SMStandingsTableViewCell *)[tableView1 dequeueReusableCellWithIdentifier:cellIdentifier];
    if( cell == nil ){
        [[NSBundle mainBundle] loadNibNamed:@"SMStandingsTableViewCell" owner:self options:nil];
        cell = standingsTableCell;
        standingsTableCell = nil;
    }
    SMTeamsInfo * teamInfo;
        NSMutableArray * teamsInGroup = [allGroups objectForKey:[allKeys objectAtIndex:indexPath.section]];
        NSLog(@"TEAMS IN GROUP %@ :: %d", teamsInGroup, indexPath.row);
        teamInfo = [teamsInGroup objectAtIndex:indexPath.row];

    [[cell teamName] setText:[teamInfo nameEN]];
    [[cell teamFlag] setImage:[teamInfo teamFlag]];
    NSString * str;
    if([segmentedControl selectedSegmentIndex] == 0) {               // for conference tab wonconf - lostconf  combination is used 
        str= [NSString stringWithFormat:@"%@",[teamInfo wonconf]];
        str = [str stringByAppendingString:@"-"];
        str = [str stringByAppendingFormat:@"%@",[teamInfo lostconf]];
    }else {                                                          // for overall tab wonconf - lostconf  combination is used 
        str= [NSString stringWithFormat:@"%@",[teamInfo wonall]];
        str = [str stringByAppendingString:@"-"];
        str = [str stringByAppendingFormat:@"%@",[teamInfo lostall]];
    }

    [[cell currentStanding ]setText:str];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    return cell;    
}

и метод numberOfRowsInSection:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSArray * array = [allGroups allKeys];
    NSLog(@"NO OF ROWS IN SECTION #%d : %d", section, [[allGroups objectForKey:[array objectAtIndex:section]] count]);  
    return [[allGroups objectForKey:[array objectAtIndex:section]] count];
}

и результат этого метода:

2011-07-08 17:46:13.837 App[7513:207] NO OF ROWS IN SECTION #1 : 7
2011-07-08 17:46:13.837 App[7513:207] NO OF ROWS IN SECTION #0 : 6

не уверен, почему раздел # 1 идет первым ... количество строк обратное.это должно быть 7 для раздела 0 и 6 для раздела 1, который кажется корнем проблемы.

Ответы [ 2 ]

3 голосов
/ 07 июля 2011

вы получили это в xcode во время отладки? если это так, он должен автоматически привести вас к линии, на которой это происходит.

Если нет, то это происходит по внешнему виду где-то в методе SMStanding tableView: cellForRowAtIndexPath:. и выглядит как универсальный массив за пределами вопроса. Если вам нужна помощь с этим, отредактируйте свой вопрос с помощью кода из этого метода.

Редактировать: В общем, для этого вида трассировки стека я пытаюсь найти имя / метод класса, который является чем-то , которое я сделал , и перейти оттуда.

1 голос
/ 07 июля 2011

означает, что у вас есть NSArray с 6 элементами, и вы запросили индекс 6, который не завершается, существуют только индексы 0..5 включительно.

это происходит внутри вашего метода делегата табличного представления [SMStandings tableView:cellForRowAtIndexPath:], возможно, вы возвращаете слишком большое число в
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...