Подтвердить что ты не робот

Как правильно установить целочисленное значение в 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);

выводит выходные данные по линиям:

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

(FWIW, timerCounter - NSUInteger.)

Я уверен, что мне не хватает чего-то достаточно очевидного, просто не знаю, что это такое.

4b9b3361

Ответ 1

Вы должны использовать intValue из полученного объекта (NSNumber) и не использовать приведение:

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

Ответ 2

Словари всегда хранят объекты. NSInteger и NSUInteger не являются объектами. В вашем словаре хранится NSNumber (помните, что [NSNumber numberWithInteger:timerCounter]?), Который является объектом. Как сказал epatel, вам нужно задать NSNumber для unsignedIntegerValue, если вы хотите NSUInteger.

Ответ 3

Или как это с литералами:

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

Сначала вы должны указать NSNumber, поскольку объект, вытащенный из словаря, будет id_nullable и поэтому не будет отвечать на методы преобразования значений.