在iOS中的多维数组中插入对象

时间:2014-10-03 23:59:52

标签: ios objective-c multidimensional-array

好的,noob问题!我想动态地将数据添加到二维数组(基本上,用C ++术语表示多维向量)。我试图使用addObject:atIndex方法,但它似乎将对象添加到2D数组中的所有列,而不是我的索引指定的特定列。以下是我的代码的相关部分:

2D阵列初始化:

for (NSInteger i=0; i<numberOfChannels; i++) {
        [allChannelArrays addObject:newChannelArray]; //newChannelArray is an empty array
    }

添加数据的方法:

-(void)updatePlot:(double)arrayvalue :(CPTPlot *)plot :(NSUInteger)i {
    static int j=0;
    [[allChannelArrays objectAtIndex:j] addObject:[NSNumber numberWithDouble:(arrayvalue + j*0.001)]]; //Here lies the problem!
    NSLog(@"number of elements in 1D array: %d", [allChannelArrays[j] count]);
    [plot insertDataAtIndex:[allChannelArrays[j] count]-1 numberOfRecords:1];
    j++;
    if (j>=self.totalChannels.numberOfChannels) {
        j=0;
    }
}

以下是显示数组中值的截图:

在执行语句之前(注意allChannelsArray的所有列中的0个对象):

enter image description here

执行语句后(在allChannelsArray的所有列中都注释1个对象): enter image description here

我也尝试了以下方法: 1.使用insertObject:atIndex方法并传递相应列的最后一个元素。 2.由于addObject似乎影响了所有列,我让它发生并尝试使用它重新将值分配给一个位置 -

allChannelArrays [j] [([allChannelArrays[j] count]-1)] = [NSNumber numberWithDouble:(arrayvalue + j*0.001)];

但即便是第二种方法也改变了所有列中的值。

我确信我犯了一些简单的错误,但我无法弄明白。这甚至是初始化2D阵列和添加数据的正确方法吗?非常感谢!

1 个答案:

答案 0 :(得分:3)

您正在向外部数组的所有4个索引添加相同的数组,而不是每次都分配一个新数组。

您的初始化代码应为

for (NSInteger i=0; i<numberOfChannels; i++) {
    [allChannelArrays addObject:[NSMutableArray new]]; 
}