1

我怀疑我正在尝试做的事情的解决方案是相当直截了当的——但是,我自己无法让它工作。

这就是我想要做的事情:我已经构建了一个纸牌游戏,在游戏加载时使用纸牌进行初始化。现在,其中一些卡片具有某些属性(卡片类型、卡片名称以及特殊数组)。卡片类型和卡片名称对象很容易检索,因为它们只是一个对象(我可以使用 objectatindex 调用)。但是,特殊数组包含几个关键字,这些关键字会根据选择的卡片而波动。因此,我没有一一初始化这些关键字(就像我对卡片类型和卡片名称所做的那样),而是将它们放入自己的特殊数组中……或数组中的数组。这是我的代码:

项目对象类:

@synthesize cardName=_cardName;
@synthesize cardType=_cardType;

-(id) initWithCardName:(NSString*)cardName initWithCardType:(NSString*)cardType initWithSpecialArray:(NSArray*) specialArray{
    self=[super init];
    if (self){
        _cardName=cardName;
        _cardType=cardType;
    }
    return self;
}

模型类

-(NSMutableArray*)deck{
    if (_deck==nil){
        _deck=[[NSMutableArray alloc]initWithObjects:
               [[itemObjects alloc]initWithCardName:@"The Long Way" initWithCardType:@"bill" initWithSpecialArray:[[NSArray alloc]initWithObjects:@"fast", @"high", nil]],
               [[itemObjects alloc]initWithCardName:@"A Short Cut" initWithCardType:@"bill" initWithTrendArray:[[NSArray alloc]initWithObjects:@"small", @"tall", nil]],nil];

查看控制器类(这是我试图调用其中一个对象,例如“快速”,但没有成功

NSString* testing=[[[self.model.deck objectAtIndex:indexPath.row]arrayForKey:@"specialArray"]objectAtIndex:0];
NSLog(@"%@",testing);

我相信我已经正确初始化了我的“specialArray”,问题在于我如何尝试调用它,但如果我在那里犯了错误,任何建议都将不胜感激。谢谢!

编辑:感谢 WendiKidd 解决了这个特殊问题。原来我没有正确初始化我的 specialArray。这导致了我在这里链接到的一个单独的问题。我还在下面为那些对未来感兴趣的人发布了我更正的代码:

@synthesize cardName=_cardName;
@synthesize cardType=_cardType;
@synthesize specialArray=_specialArray;

-(id) initWithCardName:(NSString*)cardName initWithCardType:(NSString*)cardType initWithSpecialArray:(NSArray*) specialArray{
    self=[super init];
    if (self){
        _cardName=cardName;
        _cardType=cardType;
        _specialArray=specialArray;
    }
    return self;
}
4

1 回答 1

2

你根本没有初始化你的特殊数组。您将其传递给initWithCardName,但您从未将其设置为任何内容。您需要将特殊数组存储在该类中,就像使用cardNameand一样cardType

其次,我无法确定您尝试访问特殊数组的行的正面或反面。您没有向我们提供正确的信息来查看对象的存储位置以判断您是否正确访问卡对象,但我绝对看不到您以前曾在哪里使用过密钥@"specialArray",所以没有有理由期望这将返回任何东西。但是,您的数据结构的其余部分可以工作,在某些时候,您将拥有该initWithCardName函数初始化的任何类的对象(例如,我将继续调用它CardObject)。如前所述,要从特殊数组中获取信息,您将不得不保存一个调用specialArray到类中的对象。CardObject然后你可以写这样的东西:

CardObject* card = //[whatever you have to do to access the right card object]
for(NSString* specialAttribute in card.specialArray)
{
    NSLog(@"Special Attribute: %@", specialAttribute);
}

这应该很好地打印出卡片的所有特殊属性。

如果您真的只想要列表中的第一项,正如您的示例试图访问的那样,这应该可以正常工作:

CardObject* card = //[whatever you have to do to access the right card object]
NSLog(@"Special Attribute: %@", [card.specialArray objectAtIndex:0]);
于 2013-08-16T23:31:34.870 回答