在init函数中访问类的NSDictionary属性会产生错误"使用未声明的标识符"。需要帮助了解原因

时间:2014-08-05 18:05:43

标签: ios objective-c

这是一个卡片组的类,它可以有几种不同的配置,我使用带有字符串键的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

3 个答案:

答案 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作为存储索引的类型。