- 締切済み
pngをNSDataとしてダウンロード
iPhone開発について質問です。cocos2dを利用しています。 NSURLConnectionを使って、pngファイルをダウンロードしました。 ダウンロードしたファイルはNSDataとして取得できています。 これをローカル保存し、いったん終了し次起動するときちんと読み込みCCTexture2Dを作り表示されます。 しかし、ダウンロードした段階でNSDataからUIImageを作り、CCTexture2Dをつくり表示すると真っ白な矩形になってしまいます。 原因が全く分からず困惑しています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- harawo
- ベストアンサー率58% (3742/6450)
No.1回答> 臨時にUIImageViewを作り、それにUIImageインスタンスを取り込んで、画面に表示されるか? No.1補足> また、ダウンロードしたNSDataからImageWithDataでUIImageをつくり、UIImageWriteToSavedPhotosAlbumした場合は正しい画像が保存されています。 ファイル保存ができていれば、UIImageViewに取り込んで、画面表示することは、試すまでもなくできるはずと考えるのは、いかがなものでしょう? UIImageがどこかのステップで開放されてしまっていないか?インスタンスのポインタに、ほかのインスタンスやnilが代入されていないかなど、疑いをかけるところは、まだあります。であれば、「UIImageを作り、CCTexture2Dをつくり」というプロセスにいちばん近く、かつバグの心配のない、UIImageViewへの取り込みをやってみるというのは、有効な方法だと思いますが?
- harawo
- ベストアンサー率58% (3742/6450)
まず、私はcocos2dというフレームワークを使った経験がないということを、前置きしておきます。 「原因が全く分からず困惑して」いらっしゃるということなので、そうとうがんばって問題の切り分けをなさってきたのだろうと思います。その過程のあらすじでも、ここにお書きになると、原因の特定に結びつくのではないでしょうか? > ダウンロードした段階でNSData NSURLConnectionは成功しているのか? 取り込んだNSDataインスタンスのサイズは、画像が入っていると判断できるほど大きいか? NSDataインスタンスは、retainされているか? > NSDataからUIImageを作り、 UIImageインスタンスの作成は成功しているか? 臨時にUIImageViewを作り、それにUIImageインスタンスを取り込んで、画面に表示されるか? > UIImageを作り、CCTexture2Dをつくり このプロセスは成功しているか? iPhoneは、256MBないし512MBという、限られたメモリで仕事をしているので、サイズの大きな画像を、そのまま処理することを、不得手としています。じゅうぶん小さなPNG画像を用意して、それを読み込みできるか、確認するのも、問題の切り分けとして、有効な方法です。 最低でも、このくらいの数の切り分けを行った結果を、記述していただく必要があるでしょう。
補足
NSURLCOnnectionは成功しています。インスタンスのサイズは妥当です。 また、ダウンロードしたNSDataからImageWithDataでUIImageをつくり、UIImageWriteToSavedPhotosAlbumした場合は正しい画像が保存されています。 CCTexture2Dは作成されており、画像と同じサイズのテクスチャが表示されますが、それが真っ白になってしまうのです。 また、画像は数十kbで、空きメモリは十分でした。 白くなる場合の切り分けはできているのですが、原因がわからない、といった状態です。