Oli*_*ver 1 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];
Run Code Online (Sandbox Code Playgroud)
第一个[string rangeOfString ...]方法无故障地调用,但第二个调用导致以下错误:
* - [__ NSCFString rangeOfString:options:range:locale:]:范围或索引超出范围
据我所知,问题是由新值赋值给searchRange.location引起的 - 删除该语句会导致第二次成功调用该方法.看看调试器,这些值看起来像预测的那样 - 没有任何超出范围的东西 - 而且我还在监视器上尖叫.
这只是简单的添加......不是吗?
问题是您修改了位置但不修改长度.结果是范围太长.解决方案是在增加位置时将长度减少相同的量.