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での作業中にこの警告を受け取ります。このエラーを修正する方法と影響を受けるブロックは?
回答:
この1は、誰かが入れしようとしているときに表示されるnil
で[UIImage imageNamed:]
のシンボリックブレークポイントを追加 [UIImage imageNamed:]
$arg3 == nil
シミュレーターの$r0 == nil
条件、32ビットiPhone、または$x2 == nil
64 ビットiPhoneの条件を追加します。
アプリケーションを実行し、デバッガーが停止する場所を確認します。
PSこれは、イメージ名が空の文字列の場合にも発生することに注意してください。これを[(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のブレークポイントを設定することをお勧めします。
私の場合、[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 を含むという名前のタグがありました。
ストーリーボードで画像参照をリセットして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;
}
1つの方法は、クラスメソッドをスウィズリング[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:]
ます。