如何在NSDictionary中正确设置整数值?

时间:2009-10-22 05:44:06

标签: objective-c

以下代码段:

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。)

我确定我错过了一些相当明显的东西,只是不确定它是什么。

3 个答案:

答案 0 :(得分:23)

您应该使用收到的对象中的intValueNSNumber),而不是使用演员:

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,因此不会响应值转换方法。