我刚刚开始学习 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];
您可以使用:
[NSNumber numberWithUnsignedInteger:dieIndex]
NSString *imageName = [refDictionary objectForKey: [NSNumber numberWithUnsignedInteger:dieIndex] ];
两个问题:
你没有
#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)];