Objective-C: заполнение NSMutableArray с нулями и суммирование его содержимого - PullRequest
0 голосов
/ 25 марта 2012

Я пытаюсь создать NSMutableArray, изначально заполненный нулями.Со временем элементы массива изменятся, и я хочу их суммировать.Следующий код иллюстрирует две проблемы, которые у меня возникают.Во-первых, вывод NSLog должен дать мне строку нулей, но это не так.Несмотря на то, что я ничего не делаю с массивом, я получаю вывод вроде:

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 ]

2 голосов
/ 25 марта 2012

NSArray работает с классами Objective-C, а не со встроенными типами данных C.

Более того, у него нет оператора индекса, что означает, что вы не можете получить его содержимое с помощью

array[n];

Вы должны использовать:

[array objectAtIndex:n];

Примечание , что начиная с Xcode 4.5, компилятор поддерживает синтаксис нижнего индекса, который будет преобразован в соответствующий вызов методаза кулисами.Так что array[n] действует в современном Objective-C.

Если вы хотите хранить числовые типы (int, long, float, double ...) в 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 голосов
/ 01 июня 2012

Дандан78 дал четкое объяснение.

Только небольшая заметка: NSArray / NSMutableArray - это классы DE FACTO, которые будут использоваться с какао. Для программиста на «C» они немного странные, и вы не можете использовать арифметику указателей, даже если видите «*».

Так что используйте их, но не для очень больших числовых массивов, они очень дорогие и медленные по сравнению с массивом "C".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...