2013-09-22 6 views
7

이 방법을 사용하여 조건이 참인지 확인한 다음 특정 버튼 (버튼)을 설정하여 내가 지정한 이미지를 갖게합니다. 여기에 코드가 있습니다.버튼 이미지 설정 방법

-(void)canAfford:(float) f: (UIButton*)button { 
    if([self playerHas:(f)] == YES) { 
     [button setImage:[UIImage imageNamed:nil] forState:UIControlStateNormal]; 
     [button setImage:[UIImage imageNamed:@"ButtonBGclicked.png"] forState:UIControlStateHighlighted]; 
    } else { 
     [button setImage:[UIImage imageNamed:@"ButtonBG.png"] forState:UIControlStateNormal]; 
     [button setImage:[UIImage imageNamed:nil] forState:UIControlStateHighlighted]; 
    } 
} 

여기는 오류가 있습니다.

2013-09-22 10:35:39.985 Tapple[15663:a0b] CUICatalog: Invalid asset name supplied: , or invalid scale factor: 1.000000 

답변

13

당신은 [UIImage imageNamed:@""] 또는 [UIImage imageNamed:nil]을 요구하고있다. 이미지가 빈 문자열과 일치하지 않습니다. 이미지를 지우려면 imageNamed: 대신 nil을 전달하십시오.

이 (@Kyle 팡의 의견을 통합 업데이트 원본 코드) 시도 :

- (void)canAfford:(float) f: (UIButton*)button { 
    if([self playerHas:(f)] == YES) { 
     [button setImage:nil forState:UIControlStateNormal]; 
     [button setImage:[UIImage imageNamed:@"ButtonBGclicked.png"] forState:UIControlStateHighlighted]; 
    } else { 
     [button setImage:[UIImage imageNamed:@"ButtonBG.png"] forState:UIControlStateNormal]; 
     [button setImage:nil forState:UIControlStateHighlighted]; 
    } } 
+0

동일한 오류가 여전히 발생합니다. –

+2

@bneely는'[button setImage : nil forState : UIControlStateHighlighted];를 의미한다고 생각합니다. –

1
저도 같은 오류를 가지고 시작

"CUICatalog을 : 잘못된 자산 이름을 제공 :, 또는 잘못된 축척 계수 : 2.000000의"사용 후 자산 카탈로그, Xcode 5의 새로운 기능.

일부 디버깅 후 나는 그 오류를 일으키는 원인이 "nil"또는 빈 문자열 @ ""의 인수를 클래스 메소드 [UIImage imageNamed :]에 전달하고 있음을 발견했습니다. 번들에없는 파일 이름을 전달해도 오류가 발생하지 않았습니다.

그래서 나는 비웃음에 동의한다. 지금 당신이 비겁하게 제안했지만 여전히 오류가 발생했다면 코드를 검토하고 [UIImage imageNamed :]를 호출 할 때마다 중단 점을 배치하고 nil 또는 빈 문자열을 전달하는지 확인하십시오. 논의.

참고하시기 바랍니다. 중단 점을 만들려면 코드 편집기의 왼쪽 가장자리를 클릭하고 파란색 중단 점을 추가하십시오. 그런 다음 중단 점을 마우스 오른쪽 단추로 클릭하고 팝업 메뉴에서 "중단 점 편집 .."을 선택하십시오.

(! imageFileName || [imageFileName isEqualToString : ""@]) 다음과 같이 "상태"상자 형 뭔가 imageFileName는 당신이 이미지 파일을 나타내는 문자열입니다

로드하려고합니다.

+3

동시에 여러 중단 점 조건을 편집하는 방법을 생각해 본 사람이 있으면 알려주세요 ... 이것은 어려운 오류입니다. 큰 프로젝트가 있다면 소스를 찾으십시오. – danbretl

1

이 문제점의 원인은 이미지를 정의하는 데 사용 된 데이터 배열이 weak, nonatomic으로 표시되고 나 아래에서 제거되었음을 알게되었습니다.

데이터 소스 배열을 nonatomic, retain으로 설정하면이 문제가 해결되었습니다.

0

IB 또는 스토리 보드를 사용하는 경우에만 읽어보십시오!

스토리 보드에서 UIImageView에 대한 이미지를 설정하고 자산 카탈로그에서 해당 이미지 이름을 변경 한 후에이 문제가 발생했습니다. 스토리 보드의 ImageView는 이미지보기의 속성 관리자에서 이미지 필드가 "알 수없는 이미지"라고 표시되었지만 여전히 해당 이미지와 함께있었습니다. 나중에 나는 성가신 로그를 제외하고 코드를 통해 이미지를 설정했기 때문에 모든 것이 잘 동작했다.

어, "이미지"라는 단어가 지나치게 많이 사용 된 것처럼 보입니다. 누군가를 돕기를 바랍니다.

5

중단 점을 사용하여 + [UIImage imagenamed :]가 오류를 생성하는 특정 호출을 찾는 더 좋은 방법은 심볼 릭 브레이크 포인트를 사용하는 것입니다.

중단 점 탐색기를 열고 왼쪽 하단의 "+"단추를 클릭하십시오."Add Symbolic Breakpoint ..."를 선택하십시오. 그런 다음 이러한 설정을 위해 중단 점을 편집 :

기호 : + [있는 UIImage imageNamed :] 상태 : $ R2의 == 전무

imageNamed의 인수를 가리키는 테스트는 R2를 등록 조건 : 방법, 메소드에 대한 무한 인수 빈 문자열이 인수로 사용되었는지 확인하려는 경우 Condition을 (BOOL) [(NSString *) $ r2 isEqualToString : @ ""]으로 설정할 수도 있습니다. 레지스터 r2는 장치에서 디버깅하는 경우에만 나타납니다. 시뮬레이터는 x86 아키텍처에서 실행되는 것과 달리 이름이 다른 레지스터를 사용합니다.

조건이 충족되면 디버거가 UIKit 라이브러리의 어셈블러 코드를 중단하지만 스레드의 스택 추적에서 호출의 원본 소스를 찾을 수 있습니다.

호출 소스에 대한 전체 코드베이스를 확인하려면이 단일 중단 점만 있으면됩니다.

1

1) 더하기 단추를 누른 후 Symbolic BreakPoint를 추가하십시오. plus sign at the bottom 2)이이 빌드 후 또는 확실하지 (자동으로 추가 된) 빈 문자열 boolean line for condition 3 확인하려면이 부울 줄을 추가) 그래서이 추가 약간의 도움이 될 조건을 check for nil

희망을 추가 편집 , 나를 포함했다.