2012-06-02 26 views
0

我试图从一个NSDictionaryNSNumber s作为关键获取和设置。我想我正在根据这个答案https://stackoverflow.com/a/6891489/194309做的事情,但我的代码下面返回空值。我怎么能从一个NSDictionary int的关键是NSNumbers

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

int开始,我怎么能叫objectForKeyNSDictionary,其中键是NSNumber小号?

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

回答

1

如果你想要的数字是按键,您需要反转构造函数中的顺序:

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

令人震惊的指控!!! –

+0

好消息:我也错误地声明tagOfVideoKeys,所以修复只是切换接收新构建的NSDictionaries –

1

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

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

令人震惊的指控的变量! –

+0

电脑*是如此*迂腐! –

1

还有一个原因初始化方法被调用initWithObjectsAndKeys:,而不是initWithKeysAndObjects:(尽管后者会更有意义,对我来说这是苹果......) 无论如何,奇数参数(第一,第三等)是值,偶数(第二,第四等)是键。因此请尝试:

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

改为。

+1

是的,这个方法被命名为它的工作原理,但是它让我的小兔子大脑很困惑! –