从数组中的数组访问对象(在模型类中定义)

时间:2013-08-16 23:19:26

标签: ios objective-c uitableview

我怀疑我正在尝试做的事情的解决方案是相当直接的 - 然而,我无法让它自己工作。

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

itemObjects类:

@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];

View Controller类(这是我试图调用其中一个对象的地方,例如“快”,但没有成功

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

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

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

@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;
}

1 个答案:

答案 0 :(得分:2)

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

其次,我无法在你试图访问特殊数组的行上做出正面或反面。您没有向我们提供正确的信息,以查看对象的存储位置,以确定您是否正确访问了卡片对象,但我绝对看不到您曾使用过密钥@"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]);