TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
TableViewController로 작업하는 동안이 경고가 표시됩니다. 이 오류를 수정하는 방법과 영향을받는 블록은 무엇입니까?
TableViewApplication[1458:70b] CUICatalog: Invalid asset name supplied: (null), or invalid scale factor: 2.000000
TableViewController로 작업하는 동안이 경고가 표시됩니다. 이 오류를 수정하는 방법과 영향을받는 블록은 무엇입니까?
답변:
이것은 누군가가 넣을 때 나타납니다 nil
.[UIImage imageNamed:]
다음에 대한 기호 중단 점 추가 [UIImage imageNamed:]
$arg3 == nil
시뮬레이터에 $r0 == nil
조건 추가 , 32 비트 iPhone에 조건 추가 또는$x2 == nil
64 .
애플리케이션을 실행하고 디버거가 중지되는 위치를 확인합니다.
추신 이미지 이름이 빈 문자열 인 경우에도 마찬가지입니다. [(NSString*)$x2 length] == 0
조건 에 추가 하여 확인할 수 있습니다 .
UIImage imageNamed:
하지는 않지만 그럼에도 불구하고이 중단 점을 저장합니다.
$arg3
조건부 중단 점 의 구문에 대해 몰랐습니다 . 자세한 내용은 어디에서 확인할 수 있습니까?
error: use of undeclared identifier '$arg3'
. 내가 뭐 놓친 거 없니?
(int)[$arg3 length] == 0
이 오류 (일반적으로)는 이미지를로드하려고하는데 [UIImage imageNamed:myImage]
iOS myImage
가 실제로 있는지 확실하지 않아이 NSString
경고가 표시 될 때 발생합니다.
다음을 사용하여이 문제를 해결할 수 있습니다.
[UIImage imageNamed:[NSString stringWithFormat:@"%@", myImage]]
또는 간단히 다음 length
의 이름을 확인할 수 있습니다 UIImage
.
if (myImage && [myImage length]) {
[UIImage imageNamed:myImage];
}
오류가 당신이 준 이름이라고 불평하기 때문에 (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에서 "다른 작업 수행"줄에 중단 점을 설정할 수 있습니다.
Xcode 6.4에서는 스토리 보드의 탭 표시 줄 항목에 대해 "선택한 이미지"를 사용할 때 이것이 유효한 이미지라도이 문제가 발생하는 것 같습니다.
이것은 실제로 선택된 상태 이미지를 설정하는 것 같지 않으므로 사용자 정의 런타임 속성에서 정의하고 탭 막대 항목의 SelectedImage 속성에서 제거해야합니다.
제 경우에는 [UIImage imageNamed : @ ""]를 전달하여 경고를 표시했습니다. imageNamed를 사용한 모든 줄에 중단 점을 추가하고 경고를 찾은 줄을 디버그하면됩니다.
[UIImage imageNamed:@""]
. 어떻게 고쳤나요?
if
하여 이미지 이름이 빈 문자열이 아닌지 테스트하거나 기본 "noImage"이미지를 사용하는 것 외에 적용 가능한 이름이 적용되지 않고 자산에 "noImage"이미지가 포함되지 않은 경우 이미지를 표시하지 않는 방법은 무엇입니까?
이것은 스토리 보드가 여러 개로 분할 된 후 나에게 발생했습니다 (실제 변경은 휴가 때 발생했기 때문에 정확히 어떻게 수행되었는지 모르겠습니다).
스토리 보드의 XML을 검사 한 후 이전에 자산 카탈로그에서 "bottomBar"를 가리 켰던 이미지 참조가 대신 imageView:fFo-1g-jzs:image
.
<resources>
태그 아래에있는 XML 파일의 끝에 <image name="imageView:fFo-1g-jzs:image">
큰mutableData
얼룩이 있습니다.
스토리 보드에서 이미지 참조를 재설정하고 Blob을 제거한 후 오류가 사라졌습니다.
오류의 원인은 "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;
}
한 가지 방법은 클래스 메서드를 재구성 [UIImage imageNamed:]
하여 자체 구현 으로 교체 한 다음 구현에서 이미지 이름을 확인하는 것입니다. 다음을 참조하십시오.
내 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:]
또한 스위 즐 을 원할 수 있습니다 .