我来自波兰,对于单词错误感到抱歉。
我的问题是什么?
我有红色表示的数组,它的:
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
答案 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: