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

Ios 从数组中的数组访问对象(在模型类中定义),ios,objective-c,uitableview,Ios,Objective C,Uitableview,我怀疑我试图做的事情的解决方案是相当直接的——然而,我自己无法让它工作 下面是我要做的:我已经构建了一个纸牌游戏,当游戏加载时,它会用纸牌初始化。现在,其中一些卡具有某些属性(卡类型、卡名称以及特殊数组)。card type和card name对象非常容易检索,因为它们只是一个对象(我可以使用objectatindex调用它们)。然而,这个特殊的数组包含几个关键字,这些关键字根据所选的卡片而变化。因此,我没有逐个初始化这些关键字(就像我对卡片类型和卡片名称所做的那样),而是将它们放入它们自己的特

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

下面是我要做的:我已经构建了一个纸牌游戏,当游戏加载时,它会用纸牌初始化。现在,其中一些卡具有某些属性(卡类型、卡名称以及特殊数组)。card type和card name对象非常容易检索,因为它们只是一个对象(我可以使用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];
视图控制器类(这是我试图调用其中一个对象的地方,例如“fast”,但没有成功

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

您根本没有初始化特殊数组。您将其传递给
initWithCardName
,但您从未将其设置为任何值。您需要将特殊数组存储在该类中,就像使用
cardName
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]);

很好的捕获!没有初始化SpecialRay是它没有显示在视图控制器中的原因。但是,当我尝试获取信息时,它仍然返回null(SpecialRay在ViewController中调用,我在使用ArrayWorky之前就在那里,因为它不是自动显示的,只是以更好的方式更新了它)@user2552070请确保您的所有对象都存在。也就是说,请确保您正在使用的卡对象不是
nil
。如果这样,请确保
specialray
不是nil。如果这两个对象都存在,请向我显示您尝试打印数据时使用的新行,我将看看我能找到什么:)嗯,这个对象确实存在——因为我可以很好地打印出cardName和cardType。至于特别的雷,我很确定它不是零,虽然我不确定如果它不打印出来,我怎么能说出来。下面是我试图调用的方法,它与您建议的方法类似:NSString*testing=[[self.model.deck objectAtIndex:indexPath.row]specialArray]objectAtIndex:0];NSLog(@“%@”,测试)@用户2552070良好测试。检查数组是否为nil的方法是在控制台中打印出来;在NSLog行上放置一个断点,当程序暂停时,转到输出控制台并键入
po card.specialArray
(仅使用您必须执行的操作以正确引用阵列)。它应该打印数组的值(有效内存位置)或
nil
。我看到方法调用。。。如果您可以从对象打印
cardName
等,但不能从数组中打印任何内容,我认为数组要么为空,要么为零(最佳猜测)。好的,只需检查即可。绝对是空的。这意味着我不能正确初始化它。我在模型类中初始化它的方式对您来说正确吗?我已经回滚了这个问题以显示您的原始代码;我仍在努力找出其他帮助方法,以便为您更新我的答案,但我在meta上提出了这个问题,并被告知问题本身应保持其原始状态。:)谢谢你迄今为止的帮助!我很确定我已经指出了问题所在——只是更新了代码,以显示在deck-to-hand方法中specialArray未正确传输的位置。