2009-01-29 21 views
28

Jestem nowy w rozwoju Objective-C i iPhone'a i próbuję przechowywać wartości zmiennoprzecinkowe w NSMutableArray, ale kiedy to robię, pojawia się komunikat "niekompatybilny" type dla argumentu 1 elementu "addObject". Co ja robię źle? Próbuję stworzyć tablicę podwójną, z którą mogę wykonywać obliczenia matematyczne.Jak utworzyć NSMutableArray wartości zmiennoprzecinkowych

Odpowiedz

59

NSMutableArray zawiera tylko obiekty, więc chcesz załadować tablicę obiektami NSNumber. Utwórz każdy numer NSN, aby zatrzymać swój plik podwójny, a następnie dodaj go do swojej tablicy. Być może coś takiego.

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

Powtórz zgodnie z potrzebami.

+0

Zastosowanie numberWithFloat jeśli nie trzeba precyzji. –

12

Użyć NSNumber owinąć pływak, ponieważ słownik potrzebuje obiektu:

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

odzyskać przesyłając floatValue:

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

Code jest niesprawdzone.

Można zawijać wiele innych typów danych również w NSNumber, sprawdź documentation. Istnieje również NSValue dla niektórych struktur, takich jak NSPoint i NSRect.

7

W kakao NSMutableDictionary (i wszystkie kolekcje, naprawdę) wymagają obiektów jako wartości, więc nie można po prostu przekazać żadnego innego typu danych. Jak zasugerowali sjmulder i Ryan, możesz zawijać wartości skalarne w instancjach NSNumber (dla numeru) i NSValue dla innych obiektów.

Jeśli reprezentujesz liczbę dziesiętną, za coś podobnego do ceny, sugerowałbym również przeglądanie i używanie NSDecimalNumber. Możesz wtedy uniknąć problemów związanych z niedokładnością zmiennoprzecinkową i zazwyczaj możesz używać i przechowywać "wartość" jako NSDecimalNumber zamiast reprezentowania jej za pomocą kodu pierwotnego.

Na przykład:

// 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

Proszę wyjaśnij swoją odpowiedź – Gwenc37