0

我刚开始学习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];
4

2 回答 2

2

您可以使用:

[NSNumber numberWithUnsignedInteger :dieIndex]

 NSString *imageName = [refDictionary objectForKey: [NSNumber  numberWithUnsignedInteger:dieIndex]  ];
于 2014-02-20T23:37:25.570 回答
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]];
    

如果你想让你的代码更具可读性(并且不可移植到旧版本的 iOS),你甚至可以使用新式语法:

    NSString *imageName = refDictionary[@(dieIndex)];
于 2014-02-20T23:37:58.380 回答