2012-02-21 3 views
0

카드의 값이있는 이미지에 카드의 이미지를 설정하려고합니다. KCCard의 image : 메소드는 카드의 이미지를 반환합니다.NSMutableArray에서 객체의 이미지를 업데이트하는 방법은 무엇입니까?

- (UIImage *)image:(BOOL)yesOrNo 
{ 
    if (!yesOrNo) { 
     return [UIImage imageNamed:@"back-blue-150-3.png"]; 
    } else { 
     return [UIImage imageNamed:[NSString stringWithFormat:@"%@-%@-150", [self suitAsString], [self valueAsString]]]; 
    } 
} 

거래 방법에 사용하고있는 코드는 다음과 같습니다.

int lastDealerX = 437; 
    //int lastDealerY = 49; 

    int lastDealerTag = 0; 

    for (KCCard *aCard in dealerHand) { 
     if (lastDealerTag == 0) { 
      KCCardView *cardView = [[KCCardView alloc] initWithFrame:CGRectMake(lastDealerX, 49, 150, 215)]; 
      cardView.backgroundColor = [UIColor blackColor]; 
      cardView.image = [aCard image:NO]; 
      cardView.tag = lastDealerTag; 
      [self.view addSubview:cardView]; 

      lastDealerTag = lastDealerTag + 1; 

      lastDealerX = lastDealerX + 42; 
     } else { 
      KCCardView *cardView = [[KCCardView alloc] initWithFrame:CGRectMake(lastDealerX, 49, 150, 215)]; 
      cardView.backgroundColor = [UIColor blackColor]; 
      cardView.image = [aCard image:YES]; 
      cardView.tag = lastDealerTag; 
      [self.view addSubview:cardView]; 

      lastDealerTag = lastDealerTag + 1; 

      lastDealerX = lastDealerX + 42; 
     } 
    } 

태그가 0 인 KCCardView는 카드면이 아래로 보이고 다른 카드가 앞면을 나타냅니다. 문제는 내가 얼굴을 내 보이게해서 카드를 보여주고 싶지 않을 때입니다. 다음은 쇼 코드입니다.

- (IBAction)showCard:(id)sender { 
    for (UIView *view in self.view.subviews) { 
     for (KCCard *aCard in dealerHand) { 
      KCCardView *cardView = (KCCardView *)view; 
      if (cardView.tag == 0) { 
       cardView.image = [[dealerHand objectAtIndex:0] image:YES]; 
      } 
     } 
    } 
} 

는 KCCard는 KCCardView가있는 UIImageView이며 dealerHand가있는 NSMutableArray이다 NSObject라는 것이다. http://aleckazarian.com/misc/Blackjack.zip

+1

'yesOrNo'는 아마도 당신이 가질 수있는 가장 약한 변수 이름 중 하나 일 것입니다. 나는 당신의 코드를 훑어 보았다. 그리고 나는 여전히 그것이 의미하는 바를 시도하고 추측해야만한다. –

+0

@Paul.s 글쎄, 그것을 사용하는 경우, 그때 나는 그것이 무엇을 의미 알아. YES는 카드가 표시되고 NO는 뒷면이 표시됨을 의미합니다. – Alec

+1

이것은 사실이지만 일/주/월/년을 지정하면 그 의미를 잊어 버릴 수 있습니다. 들어가는 것은 또한 나쁜 습관입니다. 이름 짓기는 어려운 것이고 나는 물건의 이름을 항상 자르고 바꾸는 경향이 있지만 그 일을해야만하는 다음 사람 (가장 가능성이 높은 사람)을 위해 내 코드가 잘 읽힐 수 있도록하십시오. –

답변

1

이이

showCard: 

에 완전히 다른 방법에있는이

showCard 

에 연결되어있는 것을 알 수 있습니다 귀하의 클래스는 - (IBAction)showCard:(id)sender;을 구현하므로 인터페이스 빌더에서 연결을 끊고 다시 연결해야합니다.


업데이트

당신이 view의 파단 반복하고 0 == tag 경우 확인되기 때문에이처럼이 보인다 내가

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

있어 나는 당신의 프로그램을 실행 두 번째 시간입니다. 0은 태그의 기본값입니다. 따라서 태그를 명시 적으로 설정하지 않으면 거의 모든 뷰가 참으로 응답합니다.

  1. 유지 : - 문제의 코드는이

    for (UIView *view in self.view.subviews) { 
        for (KCCard *aCard in dealerHand) { 
         KCCardView *cardView = (KCCardView *)view; 
         if (cardView.tag == 0) {   // <------- This is the bad check 
          cardView.image = [((KCCard *)[dealerHand objectAtIndex:0]) image:YES]; 
         } 
        } 
    } 
    

    (I이 경우 3 ~ 4 근처에 가지 않을 것이다 그들이 내 우선 순위에있는)이 문제를 해결하거나 다음 중 하나를 수행합니다 cardView 참조 '의 배열들

  2. 가 보내기 cardView'사 비 제로 tag
  3. 테스트 클래스
  4. 사용 respondsToSelector:을 만들 때` [cardView isKindOf : [UIButton 클래스]];
+0

버튼을 눌렀을 때 문제가 해결되었습니다. - [UIRoundedRectButton setImage :] : 인식 할 수없는 선택기가 인스턴스로 전송 됨 0x8204130 – Alec

+0

동일한 문제가 발생합니다. cardView.image = [((KCCard *) [dealerHand objectAtIndex : 0]) 이미지 : 예]; - [UIRoundedRectButton setImage :] : 인식 할 수없는 선택기가 인스턴스 0x7b0da70에 전송되었습니다. – Alec

+0

빌드하고 카드에 표시 했습니까? – Alec

0

이 컴파일러는 모르는이며, 객체 [dealerHand objectAtIndex:0]의 종류, 따라서 그것은 image:에 응답 할 수 없습니다 : http://aleckazarian.com/misc/Blackjack.mov 가 여기에 Xcode 프로젝트입니다 :

다음은 빌드 및 실행을 보여주는 동영상입니다. 이 시도 : 당신이 펜촉에서 연결을 보면

cardView.image = [((KCCard *)[dealerHand objectAtIndex:0]) image:YES]; 
+0

아니요. - [PlayMoney showCard] : 인스턴스로 전송 된 인식 할 수없는 선택기 0x7e0de70 – Alec

+0

모든 것을 살펴 보려면 내 Xcode 프로젝트를 업로드했습니다. – Alec

+0

Xcode 프로젝트를 살펴 보았습니다. 버튼 액션의 콘센트가 제대로 연결되어 있지 않은 것 같습니다. – fscheidl

관련 문제