как добавить значение (массив [i] +1) в NSMutableArray - PullRequest
2 голосов
/ 15 ноября 2011

Я из Польши, извините за ошибки в словах.

в чем моя проблема?

У меня есть массив с представлением красного цвета, его:

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.

спасибо за помощь, это мой первый пост здесь.

С уважением, Томек

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

В отличие от C / C ++, NSArray не доступен с помощью оператора [].Чтобы получить доступ к элементу NSArray, используйте objectAtIndex:.

[redArray objectAtIndex:ii]

Кроме того, если вы хотите добавить 1 к элементу в массиве, вы должны преобразовать исходное значение обратно в int из NSNumber.

[[redArray objectAtIndex:ii] intValue] +1

В качестве альтернативы, вы можете просто использовать обычный массив C.

int redArray[255];
redArray[index] = redArray[index] + 1

Objective-C - это супер-набор C (то есть он содержит весь C), поэтому стандартный Cмассивы действительны.

Удачи!

2 голосов
/ 15 ноября 2011

Есть три проблемы с вашим кодом.Во-первых, вы не можете получить доступ к элементам массива с помощью синтаксиса нижнего индекса.Для доступа к объектам, содержащимся в NSArray, необходимо использовать метод objectAtIndex:.

Вам необходимо заменить:

redArray[ii]

на:

[redArray objectAtIndex:ii]

И тогда вы получите экземпляр NSNumber, с которым вы не сможете напрямую выполнять арифметику.Сначала вам нужно вызвать intValue:

[[redArray objectAtIndex:ii] intValue] + 1

Кроме того, параметр atIndex: insertObject: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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...