오류 : CUICatalog : 잘못된 자산 이름 제공 : (null) 또는 잘못된 배율 인수 : 2.000000


120
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000

스크린 샷 추가

TableViewController로 작업하는 동안이 경고가 표시됩니다. 이 오류를 수정하는 방법과 영향을받는 블록은 무엇입니까?


코드를 게시 할 수 있습니까?
Patrick Hofman 2014 년

2
이 경고는 이미지 이름이 빈 문자열 인 경우에도 나타납니다
onmyway133

답변:


242

이것은 누군가가 넣을 때 나타납니다 nil.[UIImage imageNamed:]

다음에 대한 기호 중단 점 추가 [UIImage imageNamed:]기호 중단 점 예

$arg3 == nil시뮬레이터에 $r0 == nil조건 추가 , 32 비트 iPhone에 조건 추가 또는$x2 == nil 64 .

애플리케이션을 실행하고 디버거가 중지되는 위치를 확인합니다.

추신 이미지 이름이 빈 문자열 인 경우에도 마찬가지입니다. [(NSString*)$x2 length] == 0조건 에 추가 하여 확인할 수 있습니다 .


7
이것은 현명한 접근 방식입니다. 내 nil 이미지가 내 펜촉 어딘가에있는 것처럼 보이므로을 통과 UIImage imageNamed:하지는 않지만 그럼에도 불구하고이 중단 점을 저장합니다.
cbowns

9
$arg3조건부 중단 점 의 구문에 대해 몰랐습니다 . 자세한 내용은 어디에서 확인할 수 있습니까?
Zev Eisenberg 2015 년

3
왜 그것이 나를 위해 작동하지 않는지 이해하지 못하고 항상 error: use of undeclared identifier '$arg3'. 내가 뭐 놓친 거 없니?
Ben

5
나는 계속 얻는다 : 중단 점 23.1의 조건을 평가하는 오류로 인해 중지됨 : "$ r0 == nil"조건식을 구문 분석 할 수 없음 : 오류 : 선언되지 않은 식별자 '$ r0'사용 오류 : 1 개의 구문 분석 오류
Pranoy C

8
제 경우에는 이미지 이름 문자열이 비어 있었으므로 arg3 길이를 확인하는 것이 효과적이었습니다. (int)[$arg3 length] == 0
마태 복음 Korporaal

62

이 오류 (일반적으로)는 이미지를로드하려고하는데 [UIImage imageNamed:myImage]iOS myImage가 실제로 있는지 확실하지 않아이 NSString경고가 표시 될 때 발생합니다.

다음을 사용하여이 문제를 해결할 수 있습니다.

[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]

또는 간단히 다음 length의 이름을 확인할 수 있습니다 UIImage.

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}

1
누군가 내가했던 것과 똑같은 실수를했다면 UIButton의 배경 이미지가 제거되도록 업데이트하려고했기 때문에 (이미지 없음) UIImage 이름을 문자열에서 ""로 변경하여 오류가 발생했습니다. 전체 UIImage (이름 : "")를 제거하고 nil로 바꾸면 오류가 사라졌습니다.
Dave G

@DaveG 선생님, 시간을 절약했습니다. 댓글 주셔서 감사합니다!
Jeff

22

오류가 당신이 준 이름이라고 불평하기 때문에 (null)이것은를 호출함으로써 발생했을 가능성이 큽니다 [UIImage imageNamed:nil]. 또는보다 구체적으로 변수 전달이 설정되지 않았으므로 nil. 사용 stringWithFormat:하면 오류가 제거 되지만 실제로 원하는 작업을 수행하지 않을 가능성이 큽니다. 제공 한 이름이 nil값인 경우 stringWithFormat :을 사용하면 마치 호출하는 것처럼 문자 그대로 "(null)"이라는 이미지를 찾게됩니다.[UIImage imageNamed:@"(null)"] .

이와 같은 것이 아마도 더 나은 옵션 일 것입니다.

if (name) {
    UIImage *image = [UIImage imageNamed:name];
} else {
    // Do something else
}

이 코드가 처음에 nil 값으로 호출되는 이유를 파악하기 위해 Xcode에서 "다른 작업 수행"줄에 중단 점을 설정할 수 있습니다.


1
나는 같은 문제가 있었고 robotspacer가 말한 것처럼 이미지 이름이 전혀 없다는 오류가 발생했습니다.
diegomen

17

Xcode 6.4에서는 스토리 보드의 탭 표시 줄 항목에 대해 "선택한 이미지"를 사용할 때 이것이 유효한 이미지라도이 문제가 발생하는 것 같습니다.

여기에 이미지 설명 입력

이것은 실제로 선택된 상태 이미지를 설정하는 것 같지 않으므로 사용자 정의 런타임 속성에서 정의하고 탭 막대 항목의 SelectedImage 속성에서 제거해야합니다.

여기에 이미지 설명 입력


1
감사합니다! 이 오류 / 경고 메시지는 나를 미치게 만들었다! Apple이 IB에서 탭 막대 항목 "선택된 이미지"풀다운을 제거하지 않거나 올바르게 작동하도록 수정하지 않는 이유를 알 수 없습니다.
wcochran

4

제 경우에는 [UIImage imageNamed : @ ""]를 전달하여 경고를 표시했습니다. imageNamed를 사용한 모든 줄에 중단 점을 추가하고 경고를 찾은 줄을 디버그하면됩니다.


나는 또한 [UIImage imageNamed:@""]. 어떻게 고쳤나요?
Julfikar

[aButton setImage : nil forState : UIControlStateNormal]
Hahnemann

를 사용 if하여 이미지 이름이 빈 문자열이 아닌지 테스트하거나 기본 "noImage"이미지를 사용하는 것 외에 적용 가능한 이름이 적용되지 않고 자산에 "noImage"이미지가 포함되지 않은 경우 이미지를 표시하지 않는 방법은 무엇입니까?
사라짐

2

이것은 스토리 보드가 여러 개로 분할 된 후 나에게 발생했습니다 (실제 변경은 휴가 때 발생했기 때문에 정확히 어떻게 수행되었는지 모르겠습니다).

스토리 보드의 XML을 검사 한 후 이전에 자산 카탈로그에서 "bottomBar"를 가리 켰던 이미지 참조가 대신 imageView:fFo-1g-jzs:image .

<resources>태그 아래에있는 XML 파일의 끝에 <image name="imageView:fFo-1g-jzs:image">mutableData 얼룩이 있습니다.

스토리 보드에서 이미지 참조를 재설정하고 Blob을 제거한 후 오류가 사라졌습니다.


이것은 나를 위해 그것을 해결했고, 잠시 동안이 문제를 찾고 있었고, 그것은 나를 미치게 만들었습니다. 중단 점 schtick은 나를 위해 작동하지 않았습니다.
Moshe Gottlieb

여기서도 같은 문제이지만 중단 점은 xib를 찾는 데 도움이되었습니다. 이미지 이름은 Unknown Image in IB였습니다.
Josh Bernfeld 19 년

1

이 오류를 수정했습니다. [UIImage imageNamed:(NSString*) imageName]기능 의 사용법을 확인하십시오 . (가) 경우 imageName이며 nil, 다음 오류가 발생합니다.


1

유효하지 않은 이미지 이름을 제공하고 있으므로 넣기 전에 유효성을 검사해야합니다. 위의 방법 중 하나를 수행 할 수 있습니다.

if (iconImageName && [iconImageName length])
{

    [UIImage imageNamed:iconImageName];
}
else
{
     iconImageName.hidden = YES;
}

그것이 도움이되기를 바랍니다 !!!!


0

오류의 원인은 "imageNamed :"메소드에 nil 값을 전달하는 것입니다. 이를 방지하려면 nil 값을 전달하려고 할 때 imageView를 숨길 수 있습니다. UITableView에서 imageViews를 재사용하거나 scrollViews에있을 수 있습니다.

아래 확인을 통해 경고를 피했습니다.

UIImageView *your_image_view;
NSString *imageName;
if(imageName && imageName.length){
 your_image_view.hidden = NO;
 your_image_view.image = [UIImage imageNamed:imageName];
}
else {
 your_image_view.hidden = YES;
}

0

이미지 사용을로드 할 때이 경고가 표시되었습니다.로 [[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]변경하면 [UIImage imageNamed:normalStr]경고가 사라졌습니다.


0

한 가지 방법은 클래스 메서드를 재구성 [UIImage imageNamed:]하여 자체 구현 으로 교체 한 다음 구현에서 이미지 이름을 확인하는 것입니다. 다음을 참조하십시오.

iOS에서 클래스 메서드를 바꾸는 방법은 무엇입니까?

내 UIImage (Debug) 카테고리에서 이것을 구현했습니다.

+ (UIImage *)db_imageNamed:(NSString *)imageName {
    if ([imageName length] == 0) {
        NSLog(@"breakpoint here");
    }
    return [self db_imageNamed:imageName];  // not a recursive call here after swizzling
}

당신은 [UIImage imageNamed:inBundle:compatibleWithTraitCollection:]또한 스위 즐 을 원할 수 있습니다 .


-1

아마도 이것을 사용하여 "imageName"이 "nil"이 아님을 확인할 수 있습니다. 그런 다음이 경고를 무시합니다.

 if (imageName) {
    self.imageView.image = [UIImage imageNamed:imageName];
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.