диапазон выходит за пределы размер 4 цель c

У меня есть NSString из length 4. По логике, это должно работать, и expYear работает, но expMonth выдает исключение за пределами границ?

expYear = [expDate substringWithRange:NSMakeRange(0, 2)];
expMonth = [expDate substringWithRange:NSMakeRange(2, 3)];

person dsuma    schedule 06.02.2014    source источник
comment
Прочитайте документы для NSMakeRange.   -  person rmaddy    schedule 06.02.2014
comment
Вы, очевидно, очень полезны   -  person dsuma    schedule 06.02.2014
comment
Я был серьезен. Для такого вопроса все, что вам нужно было сделать, это прочитать справочную документацию для NSMakeRange, и вы бы увидели, что означает 2-й параметр. Учитывая количество голосов против, другие, кажется, согласны со мной. Ответ, который вы приняли, в основном повторяет то, что есть в документации.   -  person rmaddy    schedule 06.02.2014


Ответы (2)


Диапазон — это location и length, а не начальная и конечная позиция.

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

Таким образом, с начальным местоположением 2 и длиной 3 вы выходите за пределы конца.

Измените диапазон на основе правильной спецификации.

person Wain    schedule 06.02.2014
comment
Вы не говорите, делаете ли вы это, но вы также должны проверить длину перед запуском этого кода. - person Wain; 06.02.2014

Диапазон не означает, скажем, от 2 до 3, он, скажем, начинается с 2 и переходит к следующим 3 индексам, поэтому в этом примере вы получите 2-5, поэтому эта строка выходит за пределы:

expMonth = [expDate substringWithRange:NSMakeRange(2, 3)];
person Greg    schedule 06.02.2014