2011-11-15 75 views
2

我来自波兰,所以对于文字错误感到抱歉。如何将值(数组[i] +1)添加到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

回答

3

与C/C++,NSArray的未使用访问的[ ]运营商。 要访问NSArray的元素,请使用objectAtIndex :.

[redArray objectAtIndex:ii] 

此外,当您想要将1添加到数组中的元素时,必须将原始值从NSNumber转换回int。

[[redArray objectAtIndex:ii] intValue] +1 

另外,你可以使用一个普通的C数组。 Objective-C是C的超集(意思是它包含所有的C),所以标准C数组是有效的。

祝你好运!

2

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

你需要更换:

redArray[ii] 

有:

[redArray objectAtIndex:ii] 

然后你会得到一个NSNumber实例,与你不能直接做算术。你需要先调用intValue它:

[[redArray objectAtIndex:ii] intValue] + 1 

而且,insertObject:atIndex:atIndex:参数接受NSInteger,而不是一个NSNumber。因此,查询NSArray是没有意义的。你将不得不更换:

redArray[ii] 

只:

ii 

此调用将插入阵列中的一个新的对象。如果您打算更换以前的NSNumber,请使用replaceObjectAtIndex:withObject:

与所有的变化,线应该是这样的(我已经在几个行拆分它为清楚起见):

int red = [[redArray objectAtIndex:ii] intValue] + 1; 
NSNumber* redObject = [NSNumber numberWithInt:red]; 
[redArray insertObject:redObject atIndex:ii]; 
// or possibly: 
// [redArray replaceObjectAtIndex:ii withObject:redObject]; 
+1

一点点修正:'insertObject:atIndex:'是一个方法(实例方法),用于“NSMutableArray”,而不是“NSArray”。 – JohnK

相关问题