2013-01-31 117 views
0

我有2個NSMutableArrays,我想把某些對象形式1數組到另一個數組我已經編寫代碼,但它不工作,它給了我這個錯誤: *終止應用程序由於未捕獲的異常 'NSRangeException',原因是: '* - [__ NSArrayM objectAtIndex:]:指數296超出範圍[0 .. 295]' *第一擲調用堆棧: (0x1c9a012 0x10d7e7e 0x1c3c0b4 0x2f04 0xb20b90 0x1c59376 0x1c58e06 0x1c40a82 0x1c3ff44 0x1c3fe1b 0x1bf47e3 0x1bf4668 0x1f65c 0x252d 0x2455) libC++ abi.dylib:終止調用拋出異常把對象從一個NSMutableArray到另一個NSMutableArray

Initialisierung在viewDidLoad中:

arrayLine1 =[[NSMutableArray alloc] initWithCapacity:80000]; 
    arrayLine1a =[[NSMutableArray alloc] initWithCapacity:70000]; 
    line1tagzahl=0; 
    line1tagzahl2=0; 

傳遞代碼:

for (int a=0; a<10;) { 

      [arrayLine1a insertObject:[arrayLine1 objectAtIndex:line1tagzahl2] atIndex:line1tagzahl2]; 

      line1tagzahl2=line1tagzahl2+1; 
      a=a+1; 
     } 

函數來創建數組對象(這個函數被調用非常快速和頻繁):

for (float a=0; a<0.8;) { 
      UIImageView *line1 =[[UIImageView alloc] initWithFrame:CGRectMake(Startpoint1.center.x-(w/2),Startpoint1.center.y-kurve1yf+a,w,h)]; 
      line1.image=[UIImage imageNamed:@"Unbenannt"]; 
      line1.tag=line1tagzahl; 
      [self.view addSubview:line1]; 
      [arrayLine1 insertObject:line1 atIndex:line1tagzahl]; 
      line1tagzahl=line1tagzahl+1; 
      a=a+0.1; 
     } 

現在你應該知道有更多信息

+0

究竟什麼是您的最終目標嗎?正如其他人在下面評論的那樣,只需將數組複製到另一個可以用「複製」來完成,但它可能是你沒有分享實際嘗試實現的一些關鍵部分? –

+0

在這段代碼中,你如何以296的索引結束? –

+0

也許是因爲array2中有很多對象,並且當上面的函數初始化時,它的對象在296 – killerwakka

回答

0

and if you ask i have more than 10 objects in array2

似乎您還沒有閱讀您發佈的錯誤消息。數組中有296個對象。但是,如果你只是想複製數組,你爲什麼不...複製它?

NSMutableArray *secondArray = [firstArray mutableCopy]; 
+0

因爲我只需要從數組中獲得某些obcetcs,這些是uiimageviews,我想與其他數組中的數據交叉並且與其他數組相交,我有超過1000的容量 – killerwakka

+0

@killerwakka好像你應該使用一個集合而不是一個數組。 – 2013-01-31 19:41:58

0

使用NSMutableArray類的默認方法-addObjectsFromArray:是否有任何問題?

- (void)serverGotResponse:(NSArray *)objects { 
    [_myMutableArray addObjectsFromArray:objects]; 
} 
-1

您正試圖添加前10個對象,但是您的異常是在索引296上引發的,這是第一個超出邊界的索引。

出於某種原因,你while條件不正常,所以我建議你開始尋找有

我也建議你使用for,它實際上不是一個潛在的無限循環

for (int a = 0; a < 10; a++) { 
    [array1 insertObject:[array2 objectAtIndex:a] atIndex:a]; 
} 
更簡單明瞭
0

爲了防止越界異常,你應該使用count屬性:

while (i < array.count) { 
    // do something .. 
    i++; 
} 

如果要複製的所有對象,你可以將整個陣列複製:
數組2 = [array1 copy]

相關問題