2011-11-15 26 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

相關問題