2009-11-10 8 views
13

Rozumiem, że w Objective-C obiekty można umieszczać tylko w słownikach. Gdybym miał stworzyć słownik, musiałby mieć wszystkie obiekty. Oznacza to, że muszę umieścić moje ints jako NSNumber, prawda?Przechowywanie ints w słowniku

soo ...

NSNumber *testNum = [NSNumber numberWithInt:varMoney]; 


NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; 
[dictionary setObject:@"OMG, Object 1!!!!" forKey:@"1"]; 
[dictionary setObject:@"Number two!" forKey:@"2"]; 
[dictionary setObject:testNum forKey:@"3"]; 


NSNumber *retrieved = [dictionary objectForKey:@"3"]; 
int newVarMoney = [retrieved intValue]; 

Gdzie varMoney jest int, który został ogłoszony wcześniej. Moje pytanie brzmi, czy istnieje lepszy sposób na zapisanie "int" w słowniku niż umieszczenie go w NSNumber?

Dzięki!

Edit: 04/25/13

To było dawno nie zadał to pytanie. Dla osób, które natkną się na to w przyszłości, są łatwiejsze sposoby, aby to zrobić z Apple LLVM Compiler 4.0, który był domyślnie w Xcode. (ARC)

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
[dictionary setObject:@1337 forKey:@"1"]; 

To jest to, użyj @ 1337 składni do szybkiego tworzenia obiektów NSNumber. Współpracuje ze zmiennych, więc moja powyżej może stać:

[dictionary setObject:@(varMoney) forKey:@"3"]; 

lub

dictionary[@"mykey"] = @1337; 

prostsze.

+2

można też zrobić słownika [@ "1"] = @ 1337; – JuJoDi

Odpowiedz

18

Masz rację, NSNumber to normalny sposób poradzenia sobie z tą sytuacją. Możesz również użyć NSValue lub NSDecimalNumber.

+1

W porządku, nie sądziłem, że tak było, więc teraz wiem, dziękuję! –

0

Niestety ale nie ma :(Nie o ile wiem. Wynika to z faktu, że nie są liczbami całkowitymi obiekty i NSDictionary tylko przechowuje obiekty.

+0

W porządku, nie sądziłem, że tak było, więc teraz wiem. Dziękuję Ci! –

5

Jeśli jesteś gotów, by się znowu do korzystania Foundation rdzeń (CFDictionaries) ty można przechowywać co chcesz. ja na pewno się ze słowników, do których mogę umieścić dowolne void * wartości.

trzeba zrobić trochę więcej hydrauliką ale nie dużo, a jego wszystkie udokumentowane.