2012-03-15 87 views
0

在我的程序中,我試圖設置存儲在NSMutableArray中的對象的屬性「框架」。當我嘗試設置對象的框架時,我的程序通過消息'__ [NSCFNumber setFrame:]:發送到實例0x6a8d960的無法識別的選擇器接收到'SIGABRT'信號。我該如何解決?如何從一個NSMutableArray訪問一個對象的屬性

的for(int i = 0;我< [computerHand計數];我++) {

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

} computerHand的

聲明:

@property(retain)NSMutableArray * computerHand; 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試圖從不同的作用域訪問它時。 任何幫助表示讚賞。

+0

我們能不能看到你的代碼 – Mark 2012-03-15 12:58:54

+0

你正試圖設置框架屬性爲NSNumber實例,檢查你的數組是否有所有有效的對象,多一點的代碼將很容易解決你的問題。 – iDroid 2012-03-15 13:00:28

+0

@chiLLer,我該怎麼做呢? – Fitzy 2012-03-15 13:03:00

回答

1

問題是你沒有從你的數組中得到正確的對象。如果在將CardView從陣列中取出並在控制檯中打印說明之後突然斷開,則它是一個字符串,而不是實際的CardView。有兩件事你需要做。

  1. 請確保您只將CardViews添加到您的陣列。仔細檢查一下。
  2. 在你的循環,你可以做到這一點,以確保您只在CardViews設置幀:

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

你仍然要確保你實際上只在CardViews投入雖然,但這是一種調試方法。

相關問題