17

私の Xcode プロジェクトには、画像を含むフォルダーを指す青色の参照フォルダーがあります。

青いフォルダーの利点は、ファイルを手動で Xcode に追加する必要がないことです。そのため、フォルダーに新しい画像を追加すると、Xcode に自動的に表示されますが、コードからファイルを参照しようとすると、

[UIImage imageNamed:@"myFileFromTheBlueFolder"];

最上位フォルダーがターゲットに追加されますが、画像が見つかりません。:-(

青いフォルダーから来ているときは、画像を別の方法で参照する必要がありますか?私見は、そのようなフォルダーを持つ目的をまったく無効にします。

4

3 に答える 3

30

Kevin が提供するメモリの最適化については正しいですが+[UIImage imageNamed:]、青色のフォルダー (フォルダー参照) 内の画像にアクセスすることは絶対に可能です。フォルダ名をイメージ名に追加するだけです。例えば:

リソースは次のように編成されています。

Icons (blue folder / folder reference)
  |__camera.png
  |__checkmark.png
Shared (yellow folder / xcode group)
  |__back.png
  |__logo.png

次のように画像にアクセスできます。

[UIImage imageNamed:@"Icons/camera"];
[UIImage imageNamed:@"Icons/checkmark"];

[UIImage imageNamed:@"back"];
[UIImage imageNamed:@"logo"];
于 2014-05-30T06:34:17.737 に答える
10

問題は、「青いフォルダー」(グループではなくフォルダー参照など) がそのままアプリリソースにコピーされていることだと思います。つまり、通常のリソースのようにフラット化されていません。ビルドされた製品を確認すると、すべての通常のリソースの横におそらくフォルダー自体が表示され、フォルダー内にあったものはすべてフォルダー内に残っています。

その+[UIImage imageNamed:]ため、サブディレクトリに再帰しないため、画像を見つけることができません。を使用-[NSBundle pathForResource:ofType:inDirectory:]してリソースへのパスを取得し、それを に渡すことができます+[UIImage imageWithContentsOfFile:]が、これによりメモリの最適化が破棄され+imageNamed:ます (たとえば、使用済みの画像をキャッシュし、未使用の画像を削除する場所)。

または、フォルダー参照の使用を停止することもできます。または、リソース ビルド フェーズからフォルダー参照を削除し、代わりにそのコンテンツをビルドされた製品にコピーするシェル スクリプト ビルド フェーズを追加することもできます。

于 2012-07-16T07:44:12.743 に答える
-10

画像の完全な名前を書きます。

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

大文字と小文字を区別しない名前にも注意してください。

于 2012-07-16T07:45:44.230 に答える