0

我正在尝试从NSDictionaryNSNumbers 作为键的方式获取和设置。我想我正在根据这个答案https://stackoverflow.com/a/6891489/194309做事,但我下面的代码返回空值。

- (void)viewDidLoad {
    [super viewDidLoad];

    NSInteger const SET1 = 1;
    NSInteger const SET2 = 2;


    videoKeyOfTag = [[NSDictionary alloc] initWithObjectsAndKeys:
                    [NSNumber numberWithInt:SET1], @"well",
                    [NSNumber numberWithInt:SET2], @"great",
                    nil];
    NSLog(@"to see well: %@",[videoKeyOfTag objectForKey:[NSNumber numberWithInt:SET1]]);   

}

我期望to see well: well在日志中,但我看到了我不想要的:

to see well: (null)

从 an 开始int,我如何objectForKeyNSDictionarykey 所在的地方调用NSNumbers?

(我最终想从NSDictionarywith中提取值[sender tag]作为元键。)

4

3 回答 3

1

如果您希望数字成为键,则需要在构造函数中反转顺序:

videoKeyOfTag = [[NSDictionary alloc] initWithObjectsAndKeys:
                    @"well", [NSNumber numberWithInt:SET1], 
                    @"great", [NSNumber numberWithInt:SET2], 
                    nil];
于 2012-06-02T05:39:45.320 回答
1

initWithObjectsAndKeys- 这里第一个参数是价值,第二个是关键。你正在做相反的事情。您使用@"well"and@"great"作为键,而不是值。你应该写:

videoKeyOfTag = [[NSDictionary alloc] initWithObjectsAndKeys:
                    @"well", [NSNumber numberWithInt:SET1],
                    @"great", [NSNumber numberWithInt:SET2],
                    nil];
于 2012-06-02T05:39:53.127 回答
1

调用初始化方法initWithObjectsAndKeys:而不是调用是有原因的initWithKeysAndObjects:(尽管后者对我来说更有意义,但这是 Apple ......)无论如何,奇数参数(第一个,第三个等)是值,偶数 -编号(第 2、第 4 等)是键。所以试试:

videoKeyOfTag = [[NSDictionary alloc] initWithObjectsAndKeys:
                @"well", [NSNumber numberWithInt:SET1],
                @"great", [NSNumber numberWithInt:SET2],
                nil];

反而。

于 2012-06-02T05:43:30.123 回答