如何将值(array [i] +1)添加到NSMutableArray

时间:2011-11-15 06:45:27

标签: objective-c ios for-loop nsmutablearray

我来自波兰,对于单词错误感到抱歉。

我的问题是什么?

我有红色表示的数组,它的:

NSMutableArray *redColor = [[NSMutableArray alloc] initWithCapacity: 255];

我有FOR循环来填充我的数组值:0。

for (int i=0; i < 255; i++) {
    [redArray insertObject:[NSNumber numberWithInt:0] atIndex:i];
}
好吧没关系。但问题是我想在下一个FOR循环中添加值。

for (NSUInteger ii = 0 ; ii < width * height ; ++ii)
{
 //blablabla


[redArray insertObject:[NSNumber numberWithInt:redArray[ii]+1] atIndex:redArray[ii]];
//example: ii=4
//insertObject: (numberWithInt:value for redArray[4] + 1) at index:4.

//it's not work because i've got ERROR: Subscript requiers size of interface
//"NSMutableArray", which is non constant in non-fragile ABI.
}

我怎么能解决它?我不知道如何在NSMutableArray单元格中轻松增加值。

感谢您的帮助,这是我在这里的第一篇文章。

问候,Tomek

2 个答案:

答案 0 :(得分:3)

与C / C ++不同,不使用[]运算符访问NSArray。 要访问NSArray的元素,请使用objectAtIndex:。

[redArray objectAtIndex:ii]

此外,如果要向数组中的元素添加1,则必须将原始值从NSNumber转换回int。

[[redArray objectAtIndex:ii] intValue] +1

或者,您可以使用普通的C数组。

int redArray[255];
redArray[index] = redArray[index] + 1

Objective-C是C的超集(意味着它包含所有C),因此标准C数组是有效的。

祝你好运!

答案 1 :(得分:2)

您的代码有三个问题。首先,您无法使用下标语法访问数组元素。要访问NSArray中包含的对象,您需要使用objectAtIndex:方法。

您需要替换:

redArray[ii]

使用:

[redArray objectAtIndex:ii]

然后你会得到一个NSNumber实例,你无法直接进行算术运算。您需要先打电话intValue

[[redArray objectAtIndex:ii] intValue] + 1

此外,atIndex:的{​​{1}}参数接受insertObject:atIndex:,而不是NSInteger。因此,查询NSNumber是没有意义的。你必须替换:

NSArray

只是:

redArray[ii]

此调用将在数组中插入一个新对象。如果您打算替换之前的ii ,请使用NSNumber

对于所有更改,该行应如下所示(为了清楚起见,我将其拆分为多行):

replaceObjectAtIndex:withObject: