2010-09-16 11 views
17
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); 

Quiero agregar la barra (int) en la matriz val. ¿Esto es posible? mientras se ejecuta el código,¿Cómo agregar un valor entero en NSMutableArray?

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 

Ésta es la salida.

Aquí las barras reales son 78,235,156, al imprimir el valor de la matriz.

Im que consigue como valores como "69398112"

¿Qué debo hacer?

Respuesta

19

Agregue un número en su lugar.

NSNumber* foo = [NSNumber numberWithInteger:42]; 

o utilizando literales en caja:

NSNumber* foo = @(42); 

a continuación, añadir foo.

48

Solo puede agregar punteros a objetos a NSMutableArray. Si usa la clase NSNumber para envolver su número entero, entonces debería poder agregar eso a la matriz.

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

Espero que esto ayude.

+0

xout será una NSNumber * No es un int, a menos que también pase intValue al objeto devuelto por lastObject. – jer

+0

Gracias por captar eso, corrigió mi respuesta. –

+0

Por "punteros" Creo que te refieres a "objetos", p. agregar un 'char *' todavía requeriría envolverse en un objeto. –

1

el problema es con la cadena de NSLog saber

NSLog(@"%d", val); 

%d es, de hecho, el especificador de formato para un integer (int). Le está pasando un objeto NSMutableArray.

Cambiar el NSLog a

NSLog(@"%@", val); 

El %@ espera un objeto, y esto normalmente se imprimirá [myObject description], en este caso, una descripción de la matriz val.

1

Convertir Int a NSNumber continuación, añadir a la matriz

1

Esta es una forma sencilla: @(yourInt)

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

más información sobre at-compiler-directives

Cuestiones relacionadas