2013-07-03 19 views
0

我試圖找到自昨晚以來一直困擾我的問題的答案。ObjC/Cocoa 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]; 

第[串rangeOfString ...]方法被調用順利,但第二個電話會導致以下錯誤:

* -[__NSCFString rangeOfString:options:range:locale:]: Range or index out of bounds

從我所知道的,問題是造成通過將新值賦值給searchRange.location - 刪除該語句會導致對該方法的第二次調用成功。看着調試器,這些值似乎與預期的一樣 - 沒有超出範圍 - 我只能在顯示器上尖叫。

這只是簡單的補充......不是嗎?

+0

你可能不想申報'NSRange searchRange'兩次。 –

+0

我不知道你想做什麼。 – Radu

+0

@Radu在結構上執行算術? – Kreiri

回答

6

問題是,您修改位置,但不修改長度。結果是一個太長的範圍。解決方法是將長度減少與增加位置相同的量。

+0

仍然收到相同的錯誤。 – Oliver

+0

我猜你算'後'了? – Wain

+2

這工作:searchRange.length = [字符串長度] - searchRange.location; – stosha