2009-10-22 12 views
12

Poniższy fragment kodu:Jak poprawnie ustawić wartość całkowitą w NSDictionary?

NSLog(@"userInfo: The timer is %d", timerCounter); 

NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithInteger:timerCounter] forKey:@"timerCounter"]; 

NSUInteger c = (NSUInteger)[dict objectForKey:@"timerCounter"]; 
NSLog(@"userInfo: Timer started on %d", c); 

produkuje wyjście wzdłuż linii: (. FWIW, timerCounter jest NSUInteger)

2009-10-22 00:36:55.927 TimerHacking[2457:20b] userInfo: The timer is 1 
2009-10-22 00:36:55.928 TimerHacking[2457:20b] userInfo: Timer started on 5295968 

jestem pewien, że jestem brakuje czegoś dość oczywiste, po prostu nie jestem pewien co to jest.

Odpowiedz

22

Należy użyć intValue z odebranego przedmiotu (an NSNumber) i nie używać Obsada:

NSUInteger c = [[dict objectForKey:@"timerCounter"] intValue]; 
+5

W rzeczywistości, dla NSUInteger, powinieneś użyć '-unsignedIntegerValue'. –

+2

(I '+ [NSNumber numberWithUnsignedInteger:]', aby utworzyć NSNumber, jeśli rzeczywiście ma on być unsigned.) – Wevah

+0

Możesz użyć '@ (timerCounter)' zamiast '[NSNumber numberWithInteger: timerCounter]' – fpg1503

11

Słowniki zawsze przechowywać przedmioty. NSInteger i NSUInteger nie są obiektami. Twój słownik zapisuje numer NSNumber (pamiętaj, że [NSNumber numberWithInteger:timerCounter]?), Który jest obiektem. Tak jak powiedział epatel, musisz zapytać NSNumber o jego unsignedIntegerValue, jeśli chcesz NSUInteger.

0

Albo jak ten z literałów:

NSUInteger c = ((NSNumber *)dict[@"timerCounter"]).unsignedIntegerValue; 

Musisz rzucać jako NSNumber najpierw jako przedmiot wyciągnął ze słownika będzie id_nullable i tak nie będzie reagował na wartości konwersji metod.

Powiązane problemy