我试图找到一个自昨晚以来一直困扰着我的问题的答案。
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引起的 - 删除该语句会导致第二次成功调用该方法。看看调试器,这些值看起来像预测的那样 - 没有任何超出范围的东西 - 而且我还在监视器上尖叫。
这只是简单的添加......不是吗?
答案 0 :(得分:6)
问题是您修改了位置但不修改长度。结果是范围太长。解决方案是将长度减少与增加位置相同的量。