Frage

Ich bin neu in Objective-C und iPhone-Entwicklung, und ich versuche, Gleitkommazahlen in einem NSMutableArray zu speichern, aber wenn ich bekomme ich eine Fehlermeldung „nicht kompatibel Typen für Argument 1 von‚addObject“sagen. Was mache ich falsch? Ich versuche, ein Array von Double zu schaffen, die ich mit mathematischen Berechnungen durchführen kann.

War es hilfreich?

Lösung

NSMutableArray hält nur Objekte, so dass Sie wollen ein Array mit NSNumber Objekte geladen werden. Erstellen Sie jeden NSNumber Ihr Doppel zu halten, dann fügen Sie es zu Ihrem Array. Vielleicht so etwas wie diese.

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

Nach Bedarf wiederholen.

Andere Tipps

Verwenden Sie einen NSNumber Ihren Schwimmer zu wickeln, weil das Wörterbuch ein Objekt benötigt:

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

abrufen es durch das Senden floatvalue:

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

-Code ist nicht getestet.

Sie zu viele andere Datentypen in NSNumber wickeln können, überprüfen Sie die Dokumentation . Es gibt auch NSValue für einige Strukturen wie NSPoint und NSRect.

In Cocoa, die NSMutableDictionary (und alle Sammlungen, wirklich) benötigen Objekte als Werte, so können Sie einfach keinen anderen Datentyp übergeben. Da beide sjmulder und Ryan vorgeschlagen, können Sie Ihre skalare Werte in Fällen von NSNumber wickeln (für Nummer) und NSValue für andere Objekte.

Wenn Sie eine Dezimalzahl sind vertreten, für so etwas wie ein Preis, würde ich vorschlagen, auch betrachten und mit NSDecimalNumber . Anschließend können Sie vermeiden Punkt Ungenauigkeit Probleme schwimmen, und Sie können in der Regel verwenden, und speichern Sie den „Wert“ als NSDecimalNumber anstatt es mit einem primitiven in Code zu repräsentieren.

Zum Beispiel:

// 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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top