以下代码段:
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。)
我确定我错过了一些相当明显的东西,只是不确定它是什么。
答案 0 :(得分:23)
您应该使用收到的对象中的intValue
(NSNumber
),而不是使用演员:
NSUInteger c = [[dict objectForKey:@"timerCounter"] intValue];
答案 1 :(得分:11)
词典总是存储对象。 NSInteger和NSUInteger不是对象。你的字典存储了一个NSNumber(记住[NSNumber numberWithInteger:timerCounter]
?),这是一个对象。正如epatel所说,如果你想要一个NSUInteger,你需要向NSNumber询问unsignedIntegerValue
。
答案 2 :(得分:0)
或者喜欢这个文字:
NSUInteger c = ((NSNumber *)dict[@"timerCounter"]).unsignedIntegerValue;
您必须首先强制转换为NSNumber,因为从字典中提取的对象将是id_nullable,因此不会响应值转换方法。