質問: @[[[NSArray alloc]initWithObjects:nil, [UIImage imageNamed:@"fire_flower01.png"], [UIImage imageNamed:@"fire_flower02.png"], [UIImage imageNamed:@"fire_flower03.png"], [UIImage imageNamed:@"fire_flower04.png"], [UIImage imageNamed:@"fire_flower05.png"], nil ]]; ``` パラパラのアニメーションを行うために画像を格納していきたいのですが、どうすればよろしいでしょうか?
回答: コメントで解決しましたが、 プロジェクト内のカタログにイメージファイルをを追加していなかったということでした。 ここに補足含めてまとめておきます。 イメージ取得の API では、リソースが見つからないと `nil` を返すものがあります。 イメージリソースが見つからない原因には、以下のどちらかが有力です。 1. 単純に、イメージファイルがプロジェクトに追加されていないもしくは、ファイル名が不正 2. 実行時に、`@2x`, `@3x` 等のバージョンのリソースが読み込まれようとしたが失敗 今回は後者でしょう。環境によって、本来どのタイプのリソースが必要になるかは、 iOS Human Interface Guidelines で大まかに知ることができます。 * `@1x` : iPhone 3GS まで * `@2x` : iPhone 4,4s,5,5s,6 等の Retina 機 * `@3x` : 現状 iPhone 6 Plus のみ * iPad であれば、さらに、 `~ipad` がバージョンに付加される といったところ。実際は、カタログ (.xcassets)にリソースを追加する、 または、 ベクタイメージを用意することでことで、 これらの選択を意識しなくても良くなっています。今回は、 Retina 環境の実機が `@2x` バージョンのファイルを読みに行き、 `nil` を返したと推測されます。 Mac 上で使用していたエミュレータが Retina ディスプレイのものではなかったため、ローカルテスト中にはエラーが出なかったのでしょう。 参考: SO: Xcode 6 - xcassets for universal image support