2012-03-25 70 views
0

我試圖創建一個NSMutableArray最初零填充。隨着時間的推移,數組元素將會改變,我想對它們進行求和。下面的代碼演示了我遇到的兩個問題。首先,從NSLog的輸出應該給我一串零,但它不。即使我什麼都不做數組,我得到的輸出,如:的Objective-C:0的歸檔一個NSMutableArray,並總結其內容

array[] = 14794004, 0, 0, 0, 1, 0, 0, 0, 0 
array[] = 63, 30, 80828660, 80792872, 0, 80828564, 7478, 78955136, 1 

的NSLog的行只是爲了確認該數組的內容。那爲什麼數組元素不爲零,爲什麼它們會自發地改變?一旦我解決了第一個問題,我如何求和數組元素?提前致謝。

NSMutableArray *array; 
int arraySum = 0; 

array = [NSMutableArray arrayWithObjects: 0,0,0,0,0,0,0,0,0,nil]; 

NSLog(@"array[] = %i, %i, %i, %i, %i, %i, %i, %i, %i", array[0], array[1], array[2], array[3], array[4], array[5]), array[6], array[7], array[8]; 

for (int i = 0; i < 9; i++) { 
    arraySum = arraySum + array[i]; //Gives error: Invalid operands to binary + (have 'int' and 'struct NSMutableArry') 
}       //Isn't array[i] just one element and in this case a number? 
NSLog(@"arraySum = %i", arraySum); 

回答

2

NSArray 適用於Objective-C類,而不是內置的C數據類型。

此外,它沒有標運算符,這意味着你不能與

array[n]; 

檢索其內容必須使用:

[array objectAtIndex:n]; 

注意,作爲的Xcode 4.5,編譯器確實支持下標語法,後者將在後臺翻譯成適當的方法調用。所以array[n]在現代Objective-C中是有效的。

如果你想存儲的數值類型(intlongfloatdouble ...)在NSArray,你必須將它們包裝在一個NSNumber

NSArray* array = [NSMutableArray arrayWithObjects: [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], [NSNumber numberWithInt:0], nil]  

然後您可以按如下總結的內容:

for(NSNumber* num in array) 
{ 
    arraySum += [num intValue]; 
} 
+0

作爲新於C和Objective-C,這是很難保持兩連勝。謝謝。 – user1290817 2012-03-25 19:09:00

+0

很高興我能幫到你。別擔心,你會習慣的。順便說一句,如果這個答案對你有幫助,隨時點擊對號並將其標記爲你問題的選定答案。 – dandan78 2012-03-26 07:56:01

+0

這個答案是正確的它被賦予的時候,但對於下標支持已經在此期間被添加。由於Xcode 4.5可以做'array [n]'。作爲獎勵,'@(0)'現在可用作'[NSNumber numberWithInt:0]'的一個不太冗長的替代品。 – Janosch 2014-06-06 13:30:58

0

dandan78給予了明確的解釋。

只有一張小紙條:NSArray中/ NSMutableArray裏是用可可使用的事實上的類。 對於「C」程序員,他們是有點怪怪的,你不能使用指針算術,即使你看到「*」。

所以使用它們,但不是非常大的數字數組,他們是非常昂貴的和緩慢的,比起「C」陣列。