将负NSNumber值添加到NSDictionary

时间:2012-02-29 20:28:20

标签: objective-c nsstring nsdictionary nsnumber

作为有一些编程经验的人,我很难问这个问题。几天前我刚刚开始使用objective-c,我试图简单地将NSNumber对象添加到NSDictionary中。问题是,当我添加一个带负值的NSNumber对象时,好像它被添加为字符串而不是NSNumber。

以下是我如何初始化词典:

testDict = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithDouble:-3],@"x",
                                        [NSNumber numberWithDouble:7, @"a",
                                    nil];

我想我真的有两个问题,1。)这不是你创建一个具有负值的NSNumber对象的方式吗?

2。)当我打印出字典时,我得到以下内容:

NSLog(@"dictionary = %@", self.testDict);

a = 7;
x = "-3";

为什么双引号围绕-3?

2 个答案:

答案 0 :(得分:3)

你是对的,一切都很好。这只是字典 - 描述误导。

验证,中断NSLog()并尝试(警告:在iPhone上键入):

p [testDict objectForKey:@"x"];

它应该将它显示为NSNumber实例。

答案 1 :(得分:3)

@Conrad Shultz是对的,它只是NSDictionary的description方法如何打印字典内容(这是将字典传递给NSLog时发生的事情)的工件。

另一种验证所有内容是否按预期工作的方法是遍历字典成员并打印单个对象的描述。然后你可以看到你的负数描述看起来像一个数字而不是一个字符串。

NSDictionary* testDict = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithDouble:-3],@"x", [NSNumber numberWithDouble:7], @"a", nil];

NSArray *keys = [testDict allKeys];
for (NSString *key in keys) {
    NSLog(@"%@ => %@", key, [testDict objectForKey:key]);
}

控制台输出为:

2012-02-29 12:38:39.544 test10[1055:f803] x => -3  
2012-02-29 12:38:39.546 test10[1055:f803] a => 7