2

私は菜園アプリケーションに取り組んでいます。野菜の名前と説明とは別に、野菜の画像もあります。現在、Xcode プロジェクトの [Supported Files] フォルダーにすべての画像があります。

しかし後で、ユーザーが新しいバージョンをダウンロードすることなく、アプリケーションを動的に更新したいと考えています。ユーザーがアプリケーションを更新するか、サーバーから新しいデータをダウンロードすると、そのデータには画像が含まれます。これらの画像をサポート ファイル フォルダまたは名前だけで参照できる場所に保存できますか。

関連する質問:

また、ユーザーが野菜の写真を撮って、「植えたばかり」、「収穫間近」などの野菜に関するメモを書き込めるようにします。写真/写真を保存するための推奨されるアプローチは何ですか。私はいつでもそれらをユーザーの写真ライブラリに保存し、参照をローカルデータベースに保存してから、参照を使用して画像を取得して表示できます。このアプローチの問題は、ユーザーが誤ってライブラリから画像を削除した場合、アプリケーションに表示されなくなることです。

写真をアプリのローカルデータベースにBLOBとして保存するかどうかを確認する唯一の方法。

4

1 に答える 1

3

いいえ、ダウンロードした画像を他の画像と一緒にサポートファイルフォルダに入れることはできません。また、代わりに画像またはリソースフォルダ内に画像を配置することをお勧めします...アプリのコンパイル後にデータをダウンロードする場合、それらはバンドルに含まれません。これは、XcodeのSupportedFilesフォルダーについて話すときに参照しているバンドルです。これは、アプリケーションに対して読み取り専用です。

明確にするために、一度コンパイルすると、アプリケーションのフォルダー構造はありません。これらの「フォルダー」は、物事を整理するためのXcodeプロジェクトの単なるグループです。

画像のセットを含むzipファイルをダウンロードする場合は、ダウンロード後にディスクに書き込むのはあなた次第です。これらの画像は、tmp、キャッシュ、またはドキュメントディレクトリのいずれかに配置する必要があります。

ただし、画像を読み込む前にパスを作成する必要があります。次のようなファイルの名前だけを指定することはできません。

[UIImage imageNamed:@"something.jpg"];

これはあなたのバンドルに見えるからです。代わりに、たとえばDocumentsディレクトリから画像をロードするには、このようなことを行う必要があります。

課題は、バンドルにいくつかの画像(アプリをアップロードしたときの画像)があり、ドキュメントディレクトリに新しい画像がある状態になることです。最初にバンドルを確認する必要があります。そこに画像がない場合は、ドキュメントディレクトリを確認してください。


ユーザーが生成したデータの場合は、画像をDocumentsディレクトリに保存し、ユーザーデータのSQLiteデータベースを維持して、画像名をデータベースのエントリにマップできるようにすることをお勧めします。画像をBLOBとして保存することは避けてください。これにより、必然的にクエリのパフォーマンスが低下し、CPUに不要な負荷が追加されてUIImageに変換したり元に戻したりするためです。

2つの理由から、画像をギャラリーに保存したくない場合は、データベース内の外部画像への参照を保持することは非常に脆弱であり、問​​題を抱えているだけなので、2か所に保存することを意味します。次に、画像が翼の下にない場合は、画像を制御できなくなります。ユーザーがアプリに戻った場合、画像が表示されることを期待している場合、ユーザーはある時点で画像を削除します。

于 2012-10-15T20:40:10.650 に答える