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

问题描述:

我想设置一个UIImageView的形象等于某个图像:- [UIRoundedRectButton setImage:]:无法识别的选择发送到实例

- (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() 
+0

'KCCardView'中定义了'image'如何定义? – jrtc27 2012-02-21 21:50:49

+0

图片是一个UIImage。 – Alec 2012-02-21 21:58:51

+0

发布代码!有些东西是错误的,所以我们需要代码(除非KCCardView是UIImageView子类,在这种情况下不需要)。 – jrtc27 2012-02-21 22:24:49

你一定要明白的setImage消息被发送到一个UIRoundedRectButton实例,而不是一个UIImageView,对不对?

你可以尝试:

  • 使用[cardView setImage:aCard.cardImage forState:UIControlStateNormal];
  • 验证cardView实际上是一个UIImageView,然后让你的代码是。
+0

我确实意识到这一点,并尝试多次更改,但没有任何结果。没有forState:在UIImageView中。 – Alec 2012-02-21 21:20:20

+0

是的,它是一个UIImageView,而不是UIButton。 – Alec 2012-02-21 21:30:08

+0

你应该检查你添加到你的视图。你可能最好把所有的UIImageView放在一个特定的NSArray中,并循环遍历它,因为知道其中没有其他对象。 – 2012-02-21 21:30:26

首先,您应该发布错误的堆栈跟踪,以便我们可以确定错误在该代码中发生。您可能需要set an exception breakpoint以获取发生错误的堆栈跟踪。

其次,错误消息告诉您,您正在将setImage:消息发送到UIRoundedRectButton对象。如果错误发生在您发布的代码中,那么问题是cardViewUIButton,而不是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

无论变化是什么,该应用程序崩溃。 – Alec 2012-02-21 21:24:48

+0

请参阅我在视图中有4个KCCardView。 2个是经销商,另外2个是玩家的。顺便说一下,在我的代码中,我影响到所有KCCardView,而不仅仅是经销商。我怎么能让它只是受影响的经销商的卡? – Alec 2012-02-21 21:29:08

+1

真的吗?每一个可能的变化都会导致崩溃的应用程序?听起来不太可能。您需要发布异常的堆栈跟踪。您需要描述视图中的子视图。如果您更改了代码,则需要发布新代码。 – 2012-02-21 21:30:04