2012-10-11 179 views
0

由于某种原因,这使我今天绊倒了。NSString范围或索引超出范围

我有一个NSString我试图用-rangeOfString:options:range:进行搜索,我不断收到这个异常。我在做什么:

我正在搜索字符串,试图在某个字符索引后面找到下一个换行符(因此,给定索引i,在此之后找到@"\n"的下一个匹配项)。我有i,现在我在寻找像这样的下一个新行(这是在NSTextView子类)

NSRange untilReturn = [wholeString rangeOfString:@"\n" options:kNilOptions range:NSMakeRange(startLocation, [wholeString length] - 1)]; 

哪里wholeText是TextView的整个文本和startLocationi

但是,当我运行这个我得到一个越界异常,我似乎无法弄清楚是怎么回事。有人能帮忙吗?

回答

0

很简单!在我的特殊情况下,我使用方法-lineRangeForRange:好得多。我完全忘记了那个API。所以代码如下所示:

NSRange lineRange = [wholeString lineRangeForRange:originalRange]; 
NSString *lineString = [wholeString substringWithRange:lineRange]; 
2

NSMakeRange的第二个参数是长度(来自第一个参数)。除非startLocation总是0(并且我认为不是),否则你的长度将会太长。你实际上希望第二个参数是[wholeString length] - startLocation)。

+0

嗯,这是有道理的,但我仍然得到例外。 – jbrennan

+0

你试过'[wholeString length] -startLocation-1'吗? – teh1

+0

@ teh1是的,我有。有时会起作用,而其他时间则不起作用。让我觉得别的东西搞砸了。但这并不合理。 – jbrennan