- [UIRoundedRectButton setImage:]: нераспознанный селектор, отправленный экземпляру - PullRequest
0 голосов
/ 22 февраля 2012

Я пытаюсь установить изображение UIImageView равным определенному изображению:

- (IBAction)showCard:(id)sender {
    for (KCCardView *cardView in self.view.subviews) {
        for (KCCard *aCard in dealerHand) {
            cardView.image = aCard.cardImage;
        }
    }
}

Но все, что продолжает происходить, - это сбой приложения, и на консоль записывается следующее. Я не могу найти ошибку.

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

Спасибо!

    (gdb) backtrace
#0  0x012deccc in objc_exception_throw ()
#1  0x01150f0d in -[NSObject doesNotRecognizeSelector:] ()
#2  0x010b5e2f in ___forwarding___ ()
#3  0x010b5c12 in __forwarding_prep_0___ ()
#4  0x011510e9 in -[NSObject performSelector:withObject:withObject:] ()
#5  0x000197fd in -[UIApplication sendAction:to:from:forEvent:] ()
#6  0x00019792 in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
#7  0x000be2aa in -[UIControl sendAction:to:forEvent:] ()
#8  0x000be773 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#9  0x000bda3e in -[UIControl touchesEnded:withEvent:] ()
#10 0x0003eb04 in -[UIWindow _sendTouchesForEvent:] ()
#11 0x0003ed2d in -[UIWindow sendEvent:] ()
#12 0x0002550c in -[UIApplication sendEvent:] ()
#13 0x00018d00 in _UIApplicationHandleEvent ()
#14 0x00deb7fe in PurpleEventCallback ()
#15 0x01123435 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#16 0x01087d72 in __CFRunLoopDoSource1 ()
#17 0x0108665a in __CFRunLoopRun ()
#18 0x01085b04 in CFRunLoopRunSpecific ()
#19 0x01085a1b in CFRunLoopRunInMode ()
#20 0x00de9f67 in GSEventRunModal ()
#21 0x00dea02c in GSEventRun ()
#22 0x00016cf2 in UIApplicationMain ()
#23 0x00001ed8 in main (argc=1, argv=0xbfffed94) at /Users/Alec/Desktop/Blackjack/Blackjack/main.m:16
#24 0x00001e35 in start ()

Ответы [ 2 ]

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

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

Во-вторых, сообщение об ошибке сообщает вам, что вы отправляете сообщение setImage: UIRoundedRectButton объект.Если ошибка возникает в коде, который вы разместили, то проблема в том, что cardView это UIButton, а не UIImageView.Вы перебираете все подпредставления self.view.Итак, мы знаем, что по крайней мере одно из этих подпредставлений является UIButton, а не UIImageView.

Кроме того, ваши вложенные циклы выглядят подозрительно.Я подозреваю, что вы пытаетесь сделать что-то вроде этого:

- (IBAction)showCard:(id)sender {
    int i = 0;
    for (UIView *view in self.view.subviews) {
        if (![view isKindOfClass:[KCCardView class]])
            continue;
        KCCardView *cardView = (KCCardView *)view;
        cardView.image = [[dealerHand objectAtIndex:i++] cardImage];
    }
}

Это тоже не очень хороший способ сделать это, но это может сработать для вас.Лучшим способом было бы дать вашему контроллеру представления отдельный NSArray, который содержит ссылки только на экземпляры KCCardView.

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

Вы понимаете, что сообщение setImage отправляется экземпляру UIRoundedRectButton вместо UIImageView, верно?

Вы можете попробовать:

  • Использование [cardView setImage:aCard.cardImage forState:UIControlStateNormal];
  • Убедитесь, что ваш cardView на самом деле UIImageView, а затем сохраните ваш код как есть.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...