Второй параметр, переданный NSMakeRange, не является конечным местоположением, это длина диапазона.
Таким образом, приведенный выше код пытается найти подстроку, которая начинается с первого символа, следующего за <pre>
, а заканчивается N символов после этого, где N - индекс последний символ перед всей строкой .
Пример: в строке "wholeString<pre>test</pre>noMore"
", первый 't' из 'test' имеет индекс 16 (первый символ имеет индекс 0), а последний 't' из 'test' имеет, следовательно, индекс 19. Код выше вызовет NSMakeRange(16, 19)
, что включает 19 символов, начиная с первого «t» из «test». Но есть только 15 символов включительно, от первого «t» из «test» до конца строки. Таким образом, вы получаете выход за пределы исключение.
Вам нужно вызвать NSRange соответствующей длины. Для вышеуказанной цели это было бы
NSMakeRange(match.location+5, match1.location - (match.location+5))