1

我正在努力寻找一个自昨晚以来一直困扰我的问题的答案。

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 引起的——删除该语句会导致对该方法的第二次调用成功。查看调试器,这些值似乎与预测的一样——没有超出范围——我对着监视器尖叫。

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

4

1 回答 1

7

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

于 2013-07-03T14:32:48.667 回答