2013-06-12 32 views
1

我不明白髮生了什麼事情。正如你所看到的,我有一個107個對象的數組。當我試圖從它複製只有10個對象到另一個數組時,我得到這個錯誤。 (如果像3,8我輸入數字它會正常工作)索引超出範圍與對象索引

int count = [myJson count]; 
    NSLog(@"count: %d",count); 
    resultsArray = [myJson objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(60, 70)]]; 

...

[53269:11303] count: 107 
[53269:11303] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSArray objectsAtIndexes:]: index 129 in index set beyond bounds [0 .. 106]' 
+0

答案是問題之內。你的數組只有106個對象,你試圖訪問第129個對象。你的'NSRangeMake'會導致這個問題。檢查https://developer.apple.com/library/ios/#documentation/cocoa/reference/foundation/miscellaneous/foundation_functions/reference/reference.html#//apple_ref/c/func/NSMakeRange –

+0

-1對於濫用NSRangeMake。文件清楚地解釋了它是如何工作的。 – borrrden

+0

我確定這兩個值都是索引...感謝您的幫助和-1。我需要那個! – Segev

回答

7

NSMakeRange(i,l)。我是索引,我是長期的。 NSMakeRange(60,70)表示從60個索引到下一個70個元素的對象。

2

如果你想10個對象,那麼你必須設置的範圍爲

NSMakeRange(60, 10) 

這將採取從60到79的對象。

+0

我認爲在你的例子中是69而不是79 ... –

0

NSMakeRange有兩個參數,但他們不是「開始」和「結束」,它們是「位置」和「長度」 ......

所以NSMakeRange(60, 70)是一個範圍60130,這是在107個元素的數組中出界。

要解決此問題,請改爲使用NSMakeRange(60, 10)

0

您試圖訪問從索引60到70多個元素的元素。所以在這種情況下,您會收到此錯誤。

int count = [myJson count]; 
    NSLog(@"count: %d",count); 
    resultsArray = [myJson objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(60, 10)]]; 
0
NSMakeRange(60, 70); 

上面的語句將獲取70層的元件由邏輯從第60位置 開始ü應該具有60 + 70 = 130或陣列中多於130層的元件。

所以如果你想從元素60到70,然後使用以下

resultsArray = [myJson objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(60, 10)]];