Objective c 如何从NSMutableArray访问对象的属性

Objective c 如何从NSMutableArray访问对象的属性,objective-c,properties,nsmutablearray,frame,sigabrt,Objective C,Properties,Nsmutablearray,Frame,Sigabrt,在我的程序中,我试图设置存储在NSMutableArray中的对象的属性“frame”。当我尝试设置对象的帧时,我的程序接收到信号“SIGABRT”,并显示消息“\uuu[NSCFNumber setFrame:]:发送到实例0x6a8d960的无法识别的选择器”。如何修复此问题 对于(int i=0;i

在我的程序中,我试图设置存储在NSMutableArray中的对象的属性“frame”。当我尝试设置对象的帧时,我的程序接收到信号“SIGABRT”,并显示消息“\uuu[NSCFNumber setFrame:]:发送到实例0x6a8d960的无法识别的选择器”。如何修复此问题

对于(int i=0;i<[计算机手计数];i++) {

}

电脑手声明:

@属性(保留)NSMutableArray*computerHand

电脑手人口

-(void) addCardToHand:(NSMutableArray *)hand
{
    [hand addObject:[cards objectAtIndex:0]];
    NSLog(@"%@", [[cards objectAtIndex:0]class]);
    [cards removeObjectAtIndex:0];
}
注意-NSLog将“\uu NSCFNumber”打印到控制台

甲板人员代码

-(void) createDeck : (UIView *)view
{
    cards = [[NSMutableArray alloc]initWithCapacity:52];
    for (int i = 0; i <= 4; i++) 
    {
        for(int j = 0; j <= 13; j++)
        {
            CardView* card = [[CardView alloc] initWithFrame:CGRectMake(view.center.x - 60/2, view.center.y - 85/2, 60, 85) value:j];
            [cards addObject:card];
            [view addSubview:card];
        }
    }
    for(int i =0; i<= 52; i++)
    {
        NSLog(@"%@", [cards objectAtIndex:i]);
    }
}
-(void)createDeck:(UIView*)视图
{
卡片=[[NSMutableArray alloc]initWithCapacity:52];

对于(int i=0;i而言,问题在于您没有从数组中获取正确的对象。如果您在从数组中获取
CardView
后立即中断,并在控制台中打印描述,则它是一个字符串,而不是实际上的
CardView
。您需要做两件事

  • 确保只将CardView添加到阵列中。请仔细检查此项
  • 在for循环中,可以执行此操作以确保仅在CardView上设置帧:

    if([card isMemberOfClass:[CardView class]]) {
         card.frame = CGRectMake(10+70*i, 340, 60, 85);
    }
    

  • 您仍然希望确保实际上只输入CardView,但这是一种调试方法。

    您正在尝试将frame属性设置为NSNumber instance,检查数组中是否有所有有效的对象,再多些代码就可以轻松解决您的问题。@Coller,我该怎么做?显示您创建的代码吃了
    computerHand
    对象;我打赌它发布得太快了。不是这样,你能不能显示创建卡的代码并将其添加到
    computerHand
    这里的问题是数组
    computerHand
    中索引
    I
    处的对象不是CardView对象。没有编译时检查数组访问方式如下。数组中的值是NSNumber,因此没有
    frame
    属性。您可能应该查看将对象插入
    computerHand
    数组中的代码(此处未包括该代码)。我怀疑您会发现您实际上没有将类型为
    CardView
    的对象放入数组中。(因为不知何故有一个NSNumber进入了数组。)@ipmcc您是对的,数组中的对象是类型为NSNumber而不是CardView。我将不得不追查我犯此错误的位置。谢谢您的帮助:)
    if([card isMemberOfClass:[CardView class]]) {
         card.frame = CGRectMake(10+70*i, 340, 60, 85);
    }