当密钥是随机数时,如何从字典中获取密钥值?

时间:2014-02-20 23:26:08

标签: objective-c nsstring nsdictionary nsnumber nsuinteger

我刚刚开始学习objective-c,我正在尝试使用随机数来获取该数字键的值。

显然(对于大多数人来说),由于NSNumber和NSUInteger具有不同的数据类型,因此无法编译。但这是我最好的镜头,但编译器给了我以下错误:

  

ARC不允许将非Objective-C指针类型'NSUInteger *'(又名'unsigned int *')隐式转换为'id'

那里有没有人愿意引导我这个可能微不足道的(很多人)问题?

这是我的尝试:

NSDictionary *refDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                                    @"one", [NSNumber numberWithInteger:0],
                                    @"two", [NSNumber numberWithInteger:1],
                                    @"one", [NSNumber numberWithInteger:2],
                                    @"two", [NSNumber numberWithInteger:3],
                                    @"four",[NSNumber numberWithInteger:4],
                                    @"six", [NSNumber numberWithInteger:5], nil];


        NSUInteger *dieIndex = arc4random_uniform(6);

        NSString *imageName = [refDictionary objectForKey:dieIndex];

2 个答案:

答案 0 :(得分:2)

您可以使用:

[NSNumber numberWithUnsignedInteger :dieIndex]

 NSString *imageName = [refDictionary objectForKey: [NSNumber  numberWithUnsignedInteger:dieIndex]  ];

答案 1 :(得分:0)

两个问题:

  1. 你没有#import <stdlib.h>,所以编译器不知道在哪里找到arc4random_uniform()函数 - 更糟糕的是,你的代码暗示了它的错误签名。它返回u_int32_t,而不是NSUInteger*

  2. 您应该使用相同的语法将数字转换为您已经知道如何使用的NSNumber

    int dieIndex = arc4random_uniform(6);
    
    NSString *imageName = [refDictionary objectForKey:[NSNumber numberWithInteger:dieIndex]];
    
  3. 如果您想让您的代码更具可读性(并且不能移植到旧版本的iOS),您甚至可以使用新式语法:

        NSString *imageName = refDictionary[@(dieIndex)];