Question

Je suis nouveau dans le développement Objective-C et iPhone, et j'essaie de stocker des valeurs à virgule flottante dans un NSMutableArray, mais j'obtiens une erreur en disant & "type incompatible pour l'argument 1 de 'addObject &'; Qu'est-ce que je fais mal? J'essaie de créer un tableau de doubles avec lequel je peux effectuer des calculs mathématiques.

Était-ce utile?

La solution

NSMutableArray ne contient que des objets, vous voulez donc qu'un tableau soit chargé avec des objets NSNumber. Créez chaque NSNumber pour contenir votre double puis ajoutez-le à votre tableau. Peut-être quelque chose comme ça.

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

Répétez si nécessaire.

Autres conseils

Utilisez un NSNumber pour envelopper votre float, car le dictionnaire a besoin d'un objet:

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

récupérez-le en envoyant floatValue:

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

Le code n'a pas été testé.

Vous pouvez également insérer de nombreux autres types de données dans NSNumber. Consultez la section documentation . Il existe également NSValue pour certaines structures comme NSPoint et NSRect.

Dans Cocoa, NSMutableDictionary (et toutes les collections, en réalité) requièrent des objets en tant que valeurs, vous ne pouvez donc pas simplement transmettre un autre type de données. Comme l'ont suggéré sjmulder et Ryan, vous pouvez insérer vos valeurs scalaires dans des instances de NSNumber (pour number) et de NSValue pour d'autres objets.

Si vous représentez un nombre décimal, pour un prix comparable à un prix, je vous conseillerais également de consulter et d'utiliser NSDecimalNumber . Vous pouvez alors éviter les problèmes d’inexactitude des virgules flottantes et vous pouvez généralement utiliser et stocker la & Quot; valeur & Quot; en tant que NSDecimalNumber au lieu de le représenter par une primitive dans le code.

Par exemple:

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

// ...

[prices addObject:price];
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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top