Je suis nouveau dans le développement d'Objective-C et d'iPhone, et j'essaie de stocker des valeurs à virgule flottante dans un NSMutableArray, mais quand je le fais, j'obtiens une erreur 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.
Réponses
Trop de publicités?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 au besoin.
Utiliser un NSNumber pour envelopper votre flotteur, parce que le dictionnaire a besoin d'un objet:
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];
récupérer en envoyant floatValue:
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
Le Code n'est pas testé.
Vous pouvez emballer de nombreux autres types de données dans NSNumber trop, vérifiez la documentation. Il y a aussi NSValue pour certaines structures comme NSPoint et NSRect.
Dans le Cacao, le NSMutableDictionary (et de toutes les collections, vraiment) besoin d'objets de valeurs, de sorte que vous ne pouvez pas tout simplement passer à un autre type de données. Comme les deux sjmulder et Ryan a suggéré, vous pouvez envelopper vos valeurs scalaires dans les instances de NSNumber (pour le nombre) et NSValue pour d'autres objets.
Si vous êtes représente un nombre décimal, quelque chose comme un prix, je suggère également à la recherche et à l'aide de NSDecimalNumber. Vous pouvez alors éviter de virgule flottante de l'inexactitude des questions, et vous pouvez généralement utiliser et de stocker la "valeur" comme un NSDecimalNumber au lieu de représenter avec une primitive dans le code.
Par exemple:
// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray* prices= [[NSMutableArray array] retain];
// ...
[prices addObject:price];