53

私はiOSとXcodeにかなり慣れていません。

で画像を読み込もうとしました

[UIImage imageNamed:@"imageName.png/jpg and so on"];

しかし、それは nil を返すだけです。画像は、InterfaceBuilder のドラッグ アンド ドロップ メニューから選択でき、「ファイルを "projectname" に追加...」メニューを介して Xcode に追加されたという事実を考慮して、プロジェクト バンドルに含まれている必要があります。

.png 画像と .jpg 画像のどちらを使用しても結果は変わりません。これらは IB 経由で機能しますが、imageNamed メソッドを自分で実行しようとすると機能しません。

4

20 に答える 20

96

imageNamedで画像がnilに戻る理由はいくつかあります。

  • 画像はバンドルに含まれていません。画像が実際にプロジェクトに含まれていることを確認してください。ファイルをクリックし、それが属するターゲットを選択して、ターゲットがチェックされていることを確認します。

  • 画像名のつづりが間違っているか、拡張子に問題があります。

  • Retinaディスプレイを使用していますが、@2x画像がありません。シミュレータを網膜に変更してみて、表示されるかどうかを確認してください。

  • アセットカタログを使用している場合は、属性インスペクターで正しいデバイスが選択されていることを確認してください。

いくつかのヒント:

シミュレーターを使用してテストしている場合は、シミュレーターからアプリを削除してプロジェクトをクリーンアップしてから、再実行してください。それでも表示される場合は、電話に表示されるはずです(表示されない場合は、ファイル名または@ 2xバージョンの場合の問題である可能性があります)。

携帯電話でテストしていて表示されない場合は、同じバージョンのシミュレーターを使用していることを確認してください(iPhone 4 / 4sを使用している場合は、網膜で4 / 4sシミュレーターを使用してください)。

この投稿による最後の1つ:JPG画像がUIImage imageNamedで読み込まれない特定のJPGタイプがimageNamedで動作し、拡張子がない場合、いくつかの問題があります。IMO、JPGを使用する必要がある場合を除いて、iOSはPNGを圧縮するため、とにかくPNGを使用する必要があります。

于 2012-06-12T16:51:57.020 に答える
18

Re Mike Weller のコメント。チェックボックスは……

ここに画像の説明を入力

于 2012-06-12T14:27:06.023 に答える
16

私の場合、PNG の形式が正しくありませんでした。

なぜかXcodeのプレビューでは正しく表示されていたのですが、UIImageで読み込もうとするとnilが返ってきました。

于 2013-02-06T20:04:14.523 に答える
10

ディスク「file.jpg」で名前が付けられたjpgファイルでこの問題が発生しました

拡張子なしで、@"file" だけを読み込もうとしていました。これは png では問題なく機能しますが、jpg では機能しません。@"file.jpg" を使用すると、うまくいきました。

于 2014-09-11T19:14:32.170 に答える
2

画像を再エクスポートしてみてください。

私は同様の問題を抱えていました.UIImage imageNamedはnilを返していましたが、これらの回答のどれも私の問題を解決しませんでした.

実際にはpngファイルに問題があることがわかりました。ファイルを GIMP 画像エディターで開き、新しいファイルとして保存し、再度 png としてエクスポートすると、魔法のように機能し始めました。

私はコードをまったく変更していないので、実際の画像ファイルには間違いなく何か問題がありました。

于 2013-08-26T05:26:46.153 に答える
1

試す

[UIImage imageNamed:@"imageName.png"];

代わりに (拡張子を付けて)

于 2012-06-12T14:18:46.197 に答える
1

同様の問題がありましたが、最終的にクリーンアップで修正されました。イメージはシミュレーターに表示されましたが、iPhone でアプリを実行すると id が表示されませんでした。
私がしたこと: 1) iPhone からアプリを削除しました 2) Product/Clean を実行した後、バグが修正され、画像が表示されました!

于 2013-11-01T17:07:35.850 に答える
1

ファイルの末尾にスペースがないことを確認してください。のような名前name @2x.pngは読み込みに失敗しますが、name@2x.png問題ありません

于 2016-03-04T13:13:38.927 に答える
1

私は同じ問題を抱えていました: @"photo.jpg" は 'nil' UIImage になりました。「実際の」ファイル仕様 @"photo.JPG" に変更すると問題なく動作します。大文字と小文字の区別があることに気づきませんでした。非常に直感的ではありません。

于 2013-05-14T03:37:05.737 に答える
0

使用している DEVICE のイメージが .xcassets ファイルにあることを確認してください。iPad 用のフラグが付けられた画像は、電話 (またはシミュレートされた電話) には表示されません。

于 2014-08-28T23:03:00.950 に答える
0

イメージはシミュレーターでは機能しますが、デバイスでは機能しませんか?

その場合、このシナリオでは常に名前の大文字と小文字が関係しています。デバイスには正確な大文字と小文字が必要であり、記憶が正しければシミュレーターはそれほどうるさくありません。

たとえば、image.pngという名前の画像の場合

[UIImage imageNamed:@"Image"];

シミュレーターでは機能しますが、デバイスでは機能しません...

于 2012-06-12T14:58:24.090 に答える
0

@Inturbidus の回答に加えて: ここに来てApplication Extensionsに取り組んでいる人向け:

作業しているイメージは、ホストされているアプリと拡張機能の両方のターゲットに属している必要があります。

それ以外の場合は、常にnil拡張機能のコード内からアクセスしようとします。

于 2015-09-02T09:36:46.450 に答える