2012-02-21 25 views
0

我想設置一個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

回答

0

你一定要明白的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

5

首先,您應該發佈錯誤的堆棧跟蹤,以便我們可以確定錯誤在該代碼中發生。您可能需要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

相關問題