1

私が使用しているのは、クライアントの会社向けの iPad (のみ) 用のある種のカタログ アプリです。彼らは1000以上の製品を持っています。各商品には複数の画像を含めることができます。各商品はアプリに表示するかどうかをWebサービスから設定できます。そのため、たとえば、古い製品のデータと画像はアプリ内に存在しません。クライアントがデータを Web サービスと同期することを決定したとき。すべてのデータが更新され、すべての画像がダウンロードされます。古いデータや未使用のデータは削除する必要があります。

問題は、インターネットに接続していなくても、このアプリがオフラインで動作することを望んでいたことです。

Web サービスからすべてのデータを JSON 形式で取得し、それらを NSMutableDictionary オブジェクトとして解析するため、製品のすべてのデータを保存することは問題ありません。1000以上の製品のデータが含まれていても、問題ないはずです(推測)。

しかし、画像については、デバイスのストレージ内にどのように保持すればよいか、またそれぞれを参照する最善の方法がわかりません。各画像のサイズは 10Kb 以下にする必要があります。

私の現在のアプローチ(私が考えることができる)は、

  • すべての製品のデータを NSMutableDictionary 内に保存し、NSArchiver のメソッド archiveRoodObject:toFile を使用します (または単に [NSMutableDictionary writeToFile:atomically] を使用します)。
  • 何らかの形でデバイス ストレージ内にすべての画像を保存します。
  • 配列/辞書を作成して、参照として使用するすべての既存の画像名とパスを含め、NSArchiver に保存します (または [NSMutableDictionary writeToFile:atomically] も使用します)。同期後にこの参照内にないイメージはすべて削除されます。

これは、以前のクライアントのプロジェクトで以前行ったアプローチでした。しかし、そのプロジェクトのアプリに含まれる画像は 100 未満です。そして、私はそれを間違った方法で行っていたように感じます。

そこで、何か良い案があれば教えてください。どんな提案でも大歓迎です。

注: CoreDataへの画像の保存に関するクローズドトピックを読みました。しかし、今まで経験したことがなく、現在のプロジェクトはタイトなスケジュールであるため、今はあまりやりたくありません。ですから、本当に必要でなければ、後で試してみたいと思います。

ついに

Graver が言ったように、CoreData を使用するようにアプリを移行することにしました。しかし、最初に writeToFile を使用してすべての製品の情報を保存して、それがどのようになるかを確認しようとするかもしれません。グレイバーが言ったように、何か新しいことに挑戦することは悪くない。最終的に、私たちは何かを得るでしょう。

4

1 に答える 1

5

唯一の変更点は CoreData です。製品の詳細と画像のローカル パスはデータベースに保持しますが、実際の画像ファイルはストレージに保持します。アプリの Documents ディレクトリ内のディレクトリ。CoreData は、すべてのデータのアーカイブでは実現できないパフォーマンスを提供します。また、CoreData の経験がない場合は、アーカイブやファイルの追跡などの複雑なソリューションについて考えるよりも、ドキュメントを読んで実装する方が時間を節約できると思います。次のプロジェクトで CoreData の経験を積むことができます。 :) 2イン1

于 2012-05-08T09:14:29.310 に答える