2009-01-29 11 views
28

Soy nuevo en el desarrollo de Objective-C y iPhone, y estoy tratando de almacenar valores de coma flotante en un NSMutableArray, pero cuando lo hago obtengo un error que dice "incompatible" escriba para el argumento 1 de 'addObject'. ¿Qué estoy haciendo mal? Intento crear una matriz de dobles con la que pueda realizar cálculos matemáticos.Cómo crear un NSMutableArray de valores de coma flotante

Respuesta

59

NSMutableArray solo contiene objetos, por lo que desea que se cargue una matriz con objetos NSNumber. Crea cada NSNumber para contener tu doble y luego agrégalo a tu matriz. Quizás algo como esto.

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSNumber *num = [NSNumber numberWithFloat:10.0f]; 
[array addObject:num]; 

Repita según sea necesario.

+0

Uso numberWithFloat, si usted no necesita la precisión. –

12

Utilice un NSNumber para envolver su flotador, porque el diccionario necesita un objeto:

[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"]; 
/* or */ 
[myDictionary setObject:@0.2f forKey:@"theFloat"]; 

recuperarlo mediante el envío de floatValue:

float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue]; 

Código no se ha probado.

Puede ajustar muchos otros tipos de datos en NSNumber también, consulte documentation. También hay NSValue para algunas estructuras como NSPoint y NSRect.

7

En Cocoa, NSMutableDictionary (y todas las colecciones, realmente) requieren objetos como valores, por lo que no puede simplemente pasar cualquier otro tipo de datos. Como sugirieron sjmulder y Ryan, puede ajustar sus valores escalares en instancias de NSNumber (para número) y NSValue para otros objetos.

Si está representando un número decimal, por algo así como un precio, le sugiero también que mire y use NSDecimalNumber. A continuación, puede evitar problemas de imprecisión en el punto flotante y, en general, puede usar y almacenar el "valor" como NSDecimalNumber en lugar de representarlo con una primitiva en el código.

Por ejemplo:

// somewhere 
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain]; 
NSMutableArray* prices= [[NSMutableArray array] retain]; 

// ... 

[prices addObject:price]; 
1
NSMutableArray *muArray = [[NSMutableArray alloc] init]; 
NSNumber *float = [NSNumber numberWithFloat:210.0f]; 
NSNumber *float1 = [NSNumber numberWithFloat:211.0f]; 
[muArray addObject:float]; 
[muArray addObject:float1]; 

NSlog(@"my array is--%@",muArray); 
+0

Por favor explique su respuesta – Gwenc37

Cuestiones relacionadas