ObjC / Cocoa NSRange:范围或索引超出范围

时间:2013-07-03 14:29:12

标签: objective-c nsrange

我试图找到一个自昨晚以来一直困扰着我的问题的答案。

NSRange searchRange.location = 0;
NSRange searchRange.length = [string length]; // > 2000 characters long
NSString *substring = @"substring"; // Occurs within string several times

NSRange substringRange = [string rangeOfString:substring options:NSCaseInsensitiveSearch range:searchRange];

// Some code here. Create substring and add it to array.

// Move the search range on
searchRange.location = substringRange.location + substringRange.length;

// fails
substringRange = [string rangeOfString:substring options:NSCaseInsensitiveSearch range:searchRange];

第一个[string rangeOfString ...]方法被无故障地调用,但第二个调用导致以下错误:

  

* - [__ NSCFString rangeOfString:options:range:locale:]:范围或索引越界

据我所知,问题是由于将新值赋值给searchRange.location引起的 - 删除该语句会导致第二次成功调用该方法。看看调试器,这些值看起来像预测的那样 - 没有任何超出范围的东西 - 而且我还在监视器上尖叫。

这只是简单的添加......不是吗?

1 个答案:

答案 0 :(得分:6)

问题是您修改了位置但不修改长度。结果是范围太长。解决方案是将长度减少与增加位置相同的量。