Как получить доступ к свойству объекта из NSMutableArray - PullRequest
0 голосов
/ 15 марта 2012

В моей программе я пытаюсь установить свойство frame для объекта, хранящегося в NSMutableArray.Когда я пытаюсь установить кадр объекта, моя программа получает сигнал «SIGABRT» с сообщением «__ [NSCFNumber setFrame:]: нераспознанный селектор, отправленный экземпляру 0x6a8d960».Как это исправить?

для (int i = 0; i <[computerHand count]; i ++) {</p>

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

}

объявление computerHand:

@ property (сохранить) 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 припытаясь получить к нему доступ из другой области.Любая помощь приветствуется.

1 Ответ

1 голос
/ 15 марта 2012

Проблема в том, что вы не получаете правильный объект из вашего массива.Если вы прервитесь сразу после того, как вы получите CardView из массива и напечатаете описание в консоли, это строка, а не CardView.Вам нужно сделать две вещи.

  1. Убедитесь, что вы добавляете только CardViews в свой массив.Дважды проверьте это.
  2. В цикле for вы можете сделать это, чтобы убедиться, что вы устанавливаете только кадры на CardViews:

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

Вы все еще хотитечтобы убедиться, что вы фактически только вставляете CardViews, но это способ отладки.

...