私が使用しているのは、クライアントの会社向けの 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 を使用してすべての製品の情報を保存して、それがどのようになるかを確認しようとするかもしれません。グレイバーが言ったように、何か新しいことに挑戦することは悪くない。最終的に、私たちは何かを得るでしょう。