- [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()
答
你一定要明白的setImage
消息被发送到一个UIRoundedRectButton
实例,而不是一个UIImageView
,对不对?
你可以尝试:
- 使用
[cardView setImage:aCard.cardImage forState:UIControlStateNormal];
- 验证
cardView
实际上是一个UIImageView
,然后让你的代码是。
答
首先,您应该发布错误的堆栈跟踪,以便我们可以确定错误在该代码中发生。您可能需要set an exception breakpoint以获取发生错误的堆栈跟踪。
其次,错误消息告诉您,您正在将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
实例的引用。
'KCCardView'中定义了'image'如何定义? – jrtc27 2012-02-21 21:50:49
图片是一个UIImage。 – Alec 2012-02-21 21:58:51
发布代码!有些东西是错误的,所以我们需要代码(除非KCCardView是UIImageView子类,在这种情况下不需要)。 – jrtc27 2012-02-21 22:24:49