Ответ 1
Вы должны использовать intValue
из полученного объекта (NSNumber
) и не использовать приведение:
NSUInteger c = [[dict objectForKey:@"timerCounter"] intValue];
Следующий фрагмент кода:
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.)
Я уверен, что мне не хватает чего-то достаточно очевидного, просто не знаю, что это такое.
Вы должны использовать intValue
из полученного объекта (NSNumber
) и не использовать приведение:
NSUInteger c = [[dict objectForKey:@"timerCounter"] intValue];
Словари всегда хранят объекты. NSInteger и NSUInteger не являются объектами. В вашем словаре хранится NSNumber (помните, что [NSNumber numberWithInteger:timerCounter]
?), Который является объектом. Как сказал epatel, вам нужно задать NSNumber для unsignedIntegerValue
, если вы хотите NSUInteger.
Или как это с литералами:
NSUInteger c = ((NSNumber *)dict[@"timerCounter"]).unsignedIntegerValue;
Сначала вы должны указать NSNumber, поскольку объект, вытащенный из словаря, будет id_nullable и поэтому не будет отвечать на методы преобразования значений.