2013-06-04 4 views
1

У меня возникла странная проблема. Следующий код подстроки падает сПодстрока с аварийными характеристиками диапазона

NSString *string4 = @"<p>some</p><img></img><p></p>end of the story": 
[string4 substringWithRange:NSMakeRange(7, [string4 length] - 1)]; 

Я предполагаю, что диапазон находится в пределах границы, но он по-прежнему падает. Любая идея, почему это происходит? Ниже приведена ошибка, которую он показал.

* Нагрузочное приложение из-за неперехваченное исключение 'NSRangeException', причина: '- [__ NSCFConstantString substringWithRange]: Диапазон или индекс вне границ' * Первого стека кинуть вызов: (0x1c92012 0x10cfe7e 0x1c91deb 0x1c6aaa4 0x2bbc 0xf51c7 0xf5232 0x443d5 0x4476f 0x44905 0x4d917 0x27c5 0x11157 0x11747 0x1294b 0x23cb5 0x24beb 0x16698 0x1beddf9 0x1bedad0 0x1c07bf5 0x1c07962 0x1c38bb6 0x1c37f44 0x1c37e1b 0x1217a 0x13ffc 0x24fd 0x2425) LibC++ abi.dylib: Terminate называется бросать исключение (lldb)

+0

в конце первой строки, это двоеточие (:)? Должна быть точка с запятой (;)? – ShinTakezou

+1

Ваш диапазон больше, чем ваша строка. 'substringWithRange:' будет вызывать исключение, если вы попытаетесь получить подстроку за пределами строки. Аргументы для 'NSMakeRange' - это начальная точка и длина, а не начало и конец. – Greg

ответ

4

NSMakeRange (7, [string4 leng е] - 1)

Этот диапазон начинается 7 символов от начала и заканчивает 6 символов после конца строки.

Диапазон состоит из места начала и желаемой длины из этого местоположения.

+0

Arghh, мой плохой. Я думал, что вторым параметром является конечный индекс. Я потратил много времени на это. Большое спасибо! – RealityOD

3

Второй аргумент NSMakeRange - это количество символов, которое должно быть включено в подстроку. Таким образом, он должен быть не более [string4 length] - 7, поскольку начальное местоположение диапазона составляет 7. Попробуйте следующее:

NSString *string4 = @"<p>some</p><img></img><p></p>end of the story": 
NSUInteger start = 7; 
[string4 substringWithRange:NSMakeRange(start, [string4 length] - start - 1)]; 
Смежные вопросы