web-dev-qa-db-ja.com

エラー:CUICatalog:指定された無効なアセット名:(null)、または無効なスケール係数:2.000000

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

Screenshot added

TableViewControllerの操作中にこの警告が表示されます。このエラーを修正する方法と、どのブロックが影響を受けますか?

103
manish singh

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

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

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

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

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

198
tt.Kilew

このエラーは(通常)[UIImage imageNamed:myImage]で画像をロードしようとしたときに発生しますが、iOSはmyImageが本当にNSStringであるかどうか不明で、この警告が表示されます。

これを修正するには:

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

または、単にlengthの名前のUIImageを確認できます。

if (myImage && [myImage length]) {

    [UIImage imageNamed:myImage];
}
58
Fabio

指定した名前が(null)であるというエラーがエラーになっているため、これは[UIImage imageNamed:nil]の呼び出しが原因である可能性が高いです。より具体的には、変数を渡すことは設定されていないため、nilと等しくなります。 stringWithFormat:を使用するとエラーが解消されますが、実際に望んでいることをしていない可能性は十分にあると思います。指定した名前がnil値である場合、stringWithFormat:を使用すると、[UIImage imageNamed:@"(null)"]を呼び出しているかのように、文字通り「(null)」という名前の画像を検索します。

このようなものはおそらくより良いオプションです:

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

最初にnil値でこのコードが呼び出される理由を理解するのに役立つように、Xcodeの「何か他のことをする」行にブレークポイントを設定することができます。

21
robotspacer

Xcode 6.4では、ストーリーボードのタブバー項目に「選択された画像」を使用している場合に、有効な画像であっても発生するようです。

enter image description here

とにかく、これは選択された状態イメージを実際に設定するようには見えないので、ユーザー定義のランタイム属性で定義され、Tab Bar ItemのSelectedImage属性から削除される必要があります。

enter image description here

17
ginchly

私の場合、[UIImage imageNamed:@ ""]を渡していたため、警告が表示されました。 imageNamedを使用したすべての行にブレークポイントを追加し、警告が見つかった行をデバッグします。

3
Rahul Mathur

これは、ストーリーボードがいくつかに分割された後に起こりました(休日に実際の変更が行われたため、どのように行われたかはわかりません)。

ストーリーボードのXMLを調べたところ、以前にアセットカタログの「bottomBar」を指していたイメージ参照が、代わりにimageView:fFo-1g-jzs:imageを指していることがわかりました。

<resources>タグの下のXMLファイルの最後には、<image name="imageView:fFo-1g-jzs:image">という名前のタグに大きなmutableData blobが含まれていました。

ストーリーボードの画像参照をリセットし、ブロブを削除すると、エラーはなくなりました。

2
idrougge

無効な画像名を指定しているので、それを配置する前に検証する必要があります。上記の方法のいずれかをコードに適した方法で実行できます。

if (iconImageName && [iconImageName length])
{

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

それが役立つことを願っています!!!!

1
Aks

[[UIImage imageNamed:normalStr] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]を使用して画像を読み込むと、この警告が表示されますが、[UIImage imageNamed:normalStr]に変更すると、警告はなくなりました。

0
Meilbn

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:]も同様にスウィズルすることができます。

0
Haoxin Li

エラーの理由は、nil値を「imageNamed:」メソッドに渡すことです。これを回避するには、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
Bharath

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

0
passwind