在初始化函数中访问类的 NSDictionary 属性会给出错误"use of undeclared identifier"。需要帮助了解原因



这是一个用于一副牌的类,它可以有几个不同的配置,我使用带有字符串键和数组值的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作为存储索引的类型。

最新更新