- [UIRoundedRectButton setImage:]:发送到实例的无法识别的选择器

Ale*_*lec 0 iphone objective-c

我试图将UIImageView的图像设置为等于某个图像:

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

但所有这一切都在发生,应用程序崩溃并将以下内容记录到控制台.我似乎无法找到这个bug.

-[UIRoundedRectButton setImage:]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

谢谢!

    (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 ()
Run Code Online (Sandbox Code Playgroud)

rob*_*off 5

首先,您应该发布错误的堆栈跟踪,以便我们可以确定该代码中发生了错误.您可能需要设置异常断点以获取发生错误的堆栈跟踪.

其次,错误消息告诉您正在将setImage:消息发送到UIRoundedRectButton对象.如果您发布的代码中发生错误,则问题cardView是a UIButton,而不是a UIImageView.你正在遍历所有的子视图self.view.所以我们知道这些子视图中至少有一个是a UIButton,而不是a 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];
    }
}
Run Code Online (Sandbox Code Playgroud)

这也不是一个很好的方式,但它可能对你有用.更好的方法是为视图控制器分别NSArray提供仅包含对KCCardView实例的引用.