Что является причиной этого IndexOutOfBoudeException? - PullRequest
0 голосов
/ 17 мая 2019

Я получаю это исключение indexOutOfBoundsException.Я не могу точно выяснить, что вызывает это ..

Я пробовал различные типы массивов, я также определил емкость массива, но я продолжаю нажимать на ошибку ..

Я установил точку останова исключения, которая показывает, что эта строка вызывает проблему.

Строка проблемы?

NSDictionary *subObject = [timprofiles objectAtIndex:i];

Код:

for(int i = 0; i < timprofiles.count; i++){

    NSString *tziid = @"";
    NSString *serial = @"";
    NSString *to_time = @"";
    NSString *from_time = @"";
    NSString *monday = @"";
    NSString *tueday = @"";
    NSString *wednesday = @"";
    NSString *thursday = @"";
    NSString *friday = @"";
    NSString *saturday = @"";
    NSString *sunday = @"";
    NSString *holiday = @"";
    NSString *special_day_one = @"";
    NSString *special_day_two = @"";

    NSDictionary *subObject = [timprofiles objectAtIndex:i];

    NSString *tzid =  [subObject objectForKey:@"TZID"];
    NSString *tzitemid =  [subObject objectForKey:@"TZITEMID"];


     NSArray *timeprofiledegments = [subObject objectForKey:@"TIMEPROFILESUBSEGS"];

 //   NSLog(@"time profile segments %@", timeprofiledegments);

    for(int x = 0; x < timeprofiledegments.count; x++){


        NSDictionary *arryObjects = [timeprofiledegments objectAtIndex:i];

        tziid = [arryObjects objectForKey:@"TZIID"];
        serial = [arryObjects objectForKey:@"SERIAL"];


        NSString *timeSegList = [arryObjects objectForKey:@"TIMESLICE"];
        NSArray *splitarray = [timeSegList componentsSeparatedByString:@";"];


        for (int j = 0; j < splitarray.count; j++) {
            switch (j) {
                case 0:
                    from_time = [splitarray objectAtIndex:j];
                    break;
                case 1:
                    to_time = [splitarray objectAtIndex:j];
                    break;
                case 2:
                    monday = [splitarray objectAtIndex:j];
                    break;
                case 3:
                    tueday = [splitarray objectAtIndex:j];
                    break;
                case 4:
                    wednesday = [splitarray objectAtIndex:j];
                    break;
                case 5:
                    thursday = [splitarray objectAtIndex:j];
                    break;
                case 6:
                    friday = [splitarray objectAtIndex:j];
                    break;
                case 7:
                    saturday = [splitarray objectAtIndex:j];
                    break;
                case 8:
                    sunday = [splitarray objectAtIndex:j];
                    break;
                case 9:
                    holiday = [splitarray objectAtIndex:j];
                    break;
                case 10:
                    special_day_one = [splitarray objectAtIndex:j];
                    break;
                case 11:
                    special_day_two = [splitarray objectAtIndex:j];
                    break;
                default:
                    break;
            }

             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",tziid]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",tzid]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",serial]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",from_time]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",to_time]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",monday]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",tueday]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",wednesday]];
             [timeProfilesList addObject:[NSString stringWithFormat:@"%@",thursday]];
     }

1 Ответ

2 голосов
/ 17 мая 2019

Я думаю, что ошибка не может произойти в строке, которую вы упоминаете, но это должно произойти в строке:

NSDictionary *arryObjects = [timeprofiledegments objectAtIndex:i];

Поскольку вы используете i в качестве итератора, и вы должны использовать x.

Всего этого можно избежать, используя для каждого итератора:

for (NSDictionary *subObject in timprofiles) {
   ...
   for (NSDictionary *arryObjects in timeprofiledegments) {

Также обратите внимание, что ваш

[timeProfilesList addObject:...]

должен находиться за пределами самого внутреннего for, и нет необходимости вызывать stringWithFormat, поскольку ваши переменные уже NSString.

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