我刚刚开始学习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];
答案 0 :(得分:2)
您可以使用:
[NSNumber numberWithUnsignedInteger :dieIndex]
NSString *imageName = [refDictionary objectForKey: [NSNumber numberWithUnsignedInteger:dieIndex] ];
答案 1 :(得分:0)
两个问题:
你没有#import <stdlib.h>
,所以编译器不知道在哪里找到arc4random_uniform()
函数 - 更糟糕的是,你的代码暗示了它的错误签名。它返回u_int32_t
,而不是NSUInteger*
。
您应该使用相同的语法将数字转换为您已经知道如何使用的NSNumber
:
int dieIndex = arc4random_uniform(6);
NSString *imageName = [refDictionary objectForKey:[NSNumber numberWithInteger:dieIndex]];
如果您想让您的代码更具可读性(并且不能移植到旧版本的iOS),您甚至可以使用新式语法:
NSString *imageName = refDictionary[@(dieIndex)];