如何从NSMutableArray访问对象的属性

时间:2012-03-15 12:57:19

标签: objective-c properties nsmutablearray frame sigabrt

在我的程序中,我试图设置存储在NSMutableArray中的对象的属性“frame”。当我尝试设置对象的帧时,我的程序收到信号'SIGABRT',消息'__ [NSCFNumber setFrame:]:无法识别的选择器发送到实例0x6a8d960。我该如何解决这个问题?

  

for(int i = 0; i< [computerHand count]; i ++)     {

     
   CardView* card = [computerHand objectAtIndex:i];
   card.frame = CGRectMake(10+70*i, 340, 60, 85);
         

}

  

计算机手册声明:

  

@property(retain)NSMutableArray * computerHand;

计算机人口

-(void) addCardToHand:(NSMutableArray *)hand
{
    [hand addObject:[cards objectAtIndex:0]];
    NSLog(@"%@", [[cards objectAtIndex:0]class]);
    [cards removeObjectAtIndex:0];
}

注意 - NSLog将“__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]);
    }
}

注意:NSLog命令正确地将CardView对象打印到控制台,但在尝试从其他范围访问时打印__NSCFNumber。 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

问题是你没有从数组中获取正确的对象。如果在从阵列中取出CardView后立即中断,并在控制台中打印说明,则​​它是一个字符串,而不是CardView。你需要做两件事。

  1. 确保只将CardView添加到阵列中。仔细检查一下。
  2. 在for循环中,您可以这样做,以确保您只在CardViews上设置框架:

    if([card isMemberOfClass:[CardView class]]) {
         card.frame = CGRectMake(10+70*i, 340, 60, 85);
    }
    
  3. 你仍然想确保你实际上只是放入了CardViews,但这是一种调试方法。