昨夜から頭を悩ませていた問題の答えを見つけようとしています。
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...] メソッドは問題なく呼び出されますが、2 番目の呼び出しで次のエラーが発生します。
* -[__NSCFString rangeOfString:options:range:locale:]: 範囲またはインデックスが範囲外です
私が知る限り、問題は searchRange.location への新しい値の割り当てによって引き起こされます。そのステートメントを削除すると、メソッドへの 2 回目の呼び出しが成功します。デバッガーを見ると、値は予測どおりのように見えます (範囲外のものは何もありません)。私はモニターに向かって叫んでいます。
単純な足し算…ですね。