这是一个用于一副牌的类,它可以有几个不同的配置,我使用带有字符串键和数组值的NSDictionary来定义如何添加牌。我还没有完成init函数,但它在尝试访问NSDictionary属性时给了我上面的错误。对于objective-c来说,这是一个相当新的问题。
这是我的。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
您需要:
unsigned index = arc4random() % [[self.cardConfigurations allKeys] count];
您需要使用self
访问该属性。
供参考-你应该使用:
unsigned index = arc4random_uniform([[self.cardConfigurations allKeys] count]);
您需要通过self.cardConfigurations
来引用它。
你需要改变
unsigned index = arc4random() % [[cardConfigurations allKeys] count];
unsigned index = arc4random() % [[self.cardConfigurations allKeys] count];
在init方法中访问属性在Objective-C中是很危险的。如果getter在子类中被重写,您可能会感到非常意外。我将为索引创建另一个属性,将实例变量赋值给NSNotFound,并在调用getter方法时第一次执行计算。此外,您应该使用NSUInteger作为存储索引的类型。