这是一个卡片组的类,它可以有几种不同的配置,我使用带有字符串键的NSDictionary定义,以及如何添加卡片的数组值。我还没有完成init函数,但它在尝试访问我的NSDictionary属性时给出了上述错误。如果这是一个微不足道的问题,那么对客观来说还是比较新鲜的。对不起。
这是我的.m类文件:
@interface MarioCardDeck()
@property (strong, nonatomic)NSDictionary *cardConfigurations;
@end
@implementation MarioCardDeck
- (instancetype)init {
self = [super init];
if(self) {
unsigned index = arc4random() % [[cardConfigurations allKeys] count]; ** error line
}
return self;
}
- (NSDictionary *)cardConfigurations
{
if(!_cardConfigurations)
{
_cardConfigurations = @{
@"1" :
@[@"flower",@"coin20",@"mushroom",@"star",@"oneUp",@"flower",@"oneUp",@"flower",@"coin10",@"mushroom",@"coin20",@"star",@"mushroom",@"coin10",@"star",@"mushroom",@"flower",@"star"],
@"2" :
@[@"flower",@"coin10",@"oneUp",@"flower",@"oneUp",@"mushroom",@"star",@"mushroom",@"coin20",@"star",@"mushroom",@"coin10",@"star",@"flower",@"coin20",@"mushroom",@"flower",@"star"]
};
}
return _cardConfigurations;
}
@end
答案 0 :(得分:0)
您需要self.cardConfigurations
引用它。
答案 1 :(得分:0)
你需要:
unsigned index = arc4random() % [[self.cardConfigurations allKeys] count];
您需要使用self
。
仅供参考 - 你应该使用:
unsigned index = arc4random_uniform([[self.cardConfigurations allKeys] count]);
答案 2 :(得分:0)
您需要更改
unsigned index = arc4random() % [[cardConfigurations allKeys] count];
到
unsigned index = arc4random() % [[self.cardConfigurations allKeys] count];
然而,在Objective-C中访问init方法中的属性是危险的。如果在子类中重写getter,你可能会得到一个令人讨厌的惊喜。我会为索引创建另一个属性,将实例变量赋值给NSNotFound,并在调用getter方法时首先进行计算。此外,您应该使用NSUInteger作为存储索引的类型。