13

据我了解,在 Objective-C 中,您只能将对象放入字典中。因此,如果我要创建一个字典,它必须包含所有对象。这意味着我需要将我的整数作为 NSNumber 放入,对吗?

苏...

NSNumber *testNum = [NSNumber numberWithInt:varMoney];


NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:@"OMG, Object 1!!!!" forKey:@"1"];
[dictionary setObject:@"Number two!" forKey:@"2"];
[dictionary setObject:testNum forKey:@"3"];


NSNumber *retrieved = [dictionary objectForKey:@"3"];
int newVarMoney = [retrieved intValue];

其中 varMoney 是前面已声明的 int。我的问题是,有没有更好的方法将“int”存储在字典中而不是将其放入 NSNumber?

谢谢!

编辑:2013 年 4 月 25 日

我已经很久没有问这个问题了。对于将来偶然发现它的人来说,使用 Apple LLVM Compiler 4.0 可以更轻松地完成此操作,这在 Xcode 中已经默认使用了一段时间。(弧)

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:@1337 forKey:@"1"];

就是这样,使用@1337 语法快速创建 NSNumber 对象。与变量一起使用,所以我的上面可以变成:

[dictionary setObject:@(varMoney) forKey:@"3"];

或者

dictionary[@"mykey"] = @1337;

更简单。

4

3 回答 3

18

你是对的,NSNumber是处理这种情况的正常方法。您也可以使用NSValueor NSDecimalNumber

于 2009-11-10T01:13:29.430 回答
5

如果你准备回退到使用 Core Foundation (CFDictionaries),你可以存储任何你喜欢的东西。我肯定已经制作了字典,可以在其中放入任意 void* 值。

您需要做更多的管道工作,但并不多,并且所有这些都记录在案。

于 2009-11-10T03:01:26.497 回答
0

对不起,但没有:(据我所知。原因是整数不是对象,NSDictionary只存储对象。

于 2009-11-10T01:14:04.243 回答