Подтвердить что ты не робот

Как добавить целочисленное значение в NSMutableArray?

NSMutableArray * val;
val = [[NSMutableArray alloc] initWithCapacity:15];

/*int outlineWidth = barOutlineWidth;
int outlineHalfWidth = (outlineWidth > 1) ? outlineWidth * 0.5f : 0;
 */
for ( Bar * obj in values )
{  
  // calcualte the bar size
  float value  = [obj value];
  float scale  = ( value / maxValue );

  // shift the bar to the top or bottom of the render line
  int pointY   = lineHeight + ( (lineWidth * 0.5f) * ( ( value >= 0.0f ) ? -1 : 1 ) );
  int barHeight = height * scale;
  NSLog(@"%d", barHeight);   
  CGRect barRect = CGRectMake(pointX, pointY, width, -barHeight);
  [val addObject:[NSNumber numberWithInt:barHeight]];
                     NSLog(@"%d", val);

Я хочу добавить barheight (int) в массив val. Это возможно? во время выполнения кода,

session started at 2010-09-16 13:21:50 +0530.]
2010-09-16 13:21:53.791 BarGraphSample[3168:20b] 78
2010-09-16 13:21:53.797 BarGraphSample[3168:20b] 69398112
2010-09-16 13:21:53.807 BarGraphSample[3168:20b] 235
2010-09-16 13:21:53.812 BarGraphSample[3168:20b] 69398112
2010-09-16 13:21:53.813 BarGraphSample[3168:20b] 156
2010-09-16 13:21:53.814 BarGraphSample[3168:20b] 69398112

это результат.

Здесь фактические столбцы составляют 78 235 156, при печати массива val.

Im получает такие же значения, как "69398112"

Что мне делать?

4b9b3361

Ответ 1

Вы можете добавлять указатели только к объектам в NSMutableArray. Если вы используете класс NSNumber, но для того, чтобы обернуть целое число, вы должны добавить его в массив.

int x = 10;
NSNumber* xWrapped = [NSNumber numberWithInt:x];
NSMutableArray* array = [[NSMutableArray alloc] initWithCapacity:15];
[array addObject:xWrapped];
int xOut = [[array lastObject] intValue]; //xOut == x;

Надеюсь, что это поможет.

Ответ 2

Добавьте вместо этого число.

NSNumber* foo = [NSNumber numberWithInteger:42];

или используя литералы в коробке:

NSNumber* foo = @(42);

затем добавьте foo.

Ответ 3

Проблема связана с вашей строкой NSLog, а именно

NSLog(@"%d", val);

%d на самом деле является спецификатором формата для integer (int). Вы передаете ему объект NSMutableArray.

Измените NSLog на

NSLog(@"%@", val);

%@ ожидает объект, и обычно это будет печатать [myObject description], в этом случае описание вашего массива val.

Ответ 4

Преобразовать Int в NSNumber, а затем добавить в ваш массив

Ответ 5

Это простой способ: @(yourInt)

int value = 5;
NSMutableArray * anArray  = [[NSMutableArray alloc] init];
[anArray addObject: @(value)];

Дополнительная информация о at-compiler-directives