Как обновить изображение объекта в NSMutableArray? - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь установить изображение карты лицом вниз к изображению, которое является значением карты.Метод в KCCard, image :, возвращает изображение карты.

- (UIImage *)image:(BOOL)yesOrNo
{
    if (!yesOrNo) {
        return [UIImage imageNamed:@"back-blue-150-3.png"];
    } else {
        return [UIImage imageNamed:[NSString stringWithFormat:@"%@-%@-150", [self suitAsString], [self valueAsString]]];
    }
}

Код, который я использую в методе сделки, выглядит следующим образом.

    int lastDealerX = 437;
    //int lastDealerY = 49;

    int lastDealerTag = 0;

    for (KCCard *aCard in dealerHand) {
        if (lastDealerTag == 0) {
            KCCardView *cardView = [[KCCardView alloc] initWithFrame:CGRectMake(lastDealerX, 49, 150, 215)];
            cardView.backgroundColor = [UIColor blackColor];
            cardView.image = [aCard image:NO];
            cardView.tag = lastDealerTag;
            [self.view addSubview:cardView];

            lastDealerTag = lastDealerTag + 1;

            lastDealerX = lastDealerX + 42;
        } else {
            KCCardView *cardView = [[KCCardView alloc] initWithFrame:CGRectMake(lastDealerX, 49, 150, 215)];
            cardView.backgroundColor = [UIColor blackColor];
            cardView.image = [aCard image:YES];
            cardView.tag = lastDealerTag;
            [self.view addSubview:cardView];

            lastDealerTag = lastDealerTag + 1;

            lastDealerX = lastDealerX + 42;
        }
    }

KCCardView с тегом0 показывает карту лицевой стороной вниз, а другая карта - лицевой стороной вверх.Проблема в том, что когда я хочу показать открытую карту, это не так.Вот код шоу.

- (IBAction)showCard:(id)sender {
    for (UIView *view in self.view.subviews) {
        for (KCCard *aCard in dealerHand) {
            KCCardView *cardView = (KCCardView *)view;
            if (cardView.tag == 0) {
                cardView.image = [[dealerHand objectAtIndex:0] image:YES];
            }
        }
    }
}

KCCard - это NSObject, KCCardView - это UIImageView, а dealerHand - это NSMutableArray.

Вот видео, показывающее сборку и запуск: http://aleckazarian.com/misc/Blackjack.mov Вот проект XCode: http://aleckazarian.com/misc/Blackjack.zip

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Если вы посмотрите на соединение в кончике, вы заметите, что оно подключено к

showCard

это совершенно другой метод, чем

showCard:

В вашем классе вы реализуете - (IBAction)showCard:(id)sender;, поэтому вам нужно разорвать соединение в Интерфейсном Разработчике и снова подключить его.


Обновление

Во второй раз, когда я запускал вашу программу, я получил

-[UIRoundedRectButton setImage:]: unrecognized selector sent to instance 0x68612e0

Похоже, это потому, что вы перебираете подпредставления view и проверяете, если 0 == tag. 0 - это значение по умолчанию для тега, так что, по сути, в большинстве случаев каждое представление будет отвечать true, если только вы явно не установите теги на что-то другое. Код проблемы это

for (UIView *view in self.view.subviews) {
    for (KCCard *aCard in dealerHand) {
        KCCardView *cardView = (KCCardView *)view;
        if (cardView.tag == 0) {          // <------- This is the bad check
            cardView.image = [((KCCard *)[dealerHand objectAtIndex:0]) image:YES];
        }
    }
}

Чтобы это исправить, выполните одно из следующих действий (они в порядке моих предпочтений - в этом случае я бы не приблизился к 3 или 4):

  1. Сохранить ссылку на cardView в массиве
  2. Дайте cardView ненулевое tag при их создании
  3. Использование respondsToSelector:
  4. Тест для класса `[cardView isKindOf: [UIButton class]];
0 голосов
/ 22 февраля 2012

Компилятор не знает, что это за объект [dealerHand objectAtIndex:0], поэтому он не может ответить на image:.Попробуйте это:

cardView.image = [((KCCard *)[dealerHand objectAtIndex:0]) image:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...