エラー: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

この1は、誰かが入れしようとしているときに表示されるnil[UIImage imageNamed:]

のシンボリックブレークポイントを追加 [UIImage imageNamed:]シンボリックブレークポイントの例

$arg3 == nilシミュレーターの$r0 == nil条件、32ビットiPhone、または$x2 == nil64 ビットiPhoneの条件を追加します。

アプリケーションを実行し、デバッガーが停止する場所を確認します。

PSこれは、イメージ名が空の文字列の場合にも発生することに注意してください。これを[(NSString*)$x2 length] == 0条件に追加することで確認できます。


7
これは賢いアプローチです。私のnilイメージはnibのどこかにあるようですのでUIImage imageNamed:、通過しませんが、それでもこのブレークポイントを保存しています。
cbowns

9
$arg3条件付きブレークポイントの構文については知りませんでした。詳細はどこで確認できますか?
Zev Eisenberg、2015年

3
それがなぜ私にとってうまくいかないのかわからない、いつも戻ってくるerror: use of undeclared identifier '$arg3'。私は何か見落としてますか?
ベン

5
取得し続ける:ブレークポイント23.1のエラー評価条件のために停止: "$ r0 == nil"条件式を解析できませんでした:エラー:宣言されていない識別子の使用 '$ r0'エラー:式の解析中に1つのエラー
Pranoy C

8
私の場合、イメージ名の文字列は空だったので、arg3の長さをチェックするのがうまくいきました。(int)[$arg3 length] == 0
Matthew Korporaal 2017年

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(named: "")全体を削除して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が言うようにイメージ名がnilであるというものでした。
diegomen 2014年

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">、大きなmutableDatablob を含むという名前のタグがありました。

ストーリーボードで画像参照をリセットしてblobを削除した後、エラーはなくなりました。


これは私のためにそれを解決しました、しばらくの間この問題を探していました、それは私を狂わせました。ブレークポイントschtickは私にとっては機能しませんでした。
Moshe Gottlieb

ここでも同じ問題ですが、ブレークポイントはそれが含まれていたxibを見つけるのに役立ちました。イメージ名はIBの不明なイメージでした。
Josh Bernfeld

1

このエラーを修正しました。[UIImage imageNamed:(NSString*) imageName]関数の使用方法を確認してください。場合imageNamenil、エラーが発生します。


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

1つの方法は、クラスメソッドをスウィズリング[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.