2012-05-08 7 views
1

私は、クライアントの会社のためにiPad用のカタログアプリ(何らかの種類)を使用しています。彼らは1000以上の製品を持っています。各製品は複数のイメージを持つことができます。各製品は、アプリケーションに表示するかどうかに関係なく、Webサービスから設定できます。たとえば、旧式の製品のデータや画像は、アプリ内には存在しません。私のクライアントがデータをWebサービスと同期させることに決めたとき。すべてのデータが更新され、すべての画像がダウンロードされます。古いデータまたは使用されていないものは削除する必要があります。iPadのストレージ内に1000以上の画像を保存する

これは、インターネットに接続しなくてもオフラインで作業することを望んでいました。

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

しかし、イメージの場合、デバイスストレージ内にそれらを保管しておき、それらのそれぞれを参照する最良の方法をどのように保つべきかわかりません。各画像は10Kb以下のサイズでなければなりません。

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

  • にストアされNSMutableDictionaryと使用NSArchiverの方法、archiveRoodObject内のすべての製品のデータ:
  • :(または多分ちょうど使用[アトミックNSMutableDictionary WRITETOFILE])toFileの
  • デバイスストレージ内のすべてのイメージを何らかの形で保存します。
  • アレイ/ディクショナリを作成すると、既存のイメージの名前とパスがすべて参照として使用され、NSArchiverで保存されます(または[NSMutableDictionary writeToFile:atomically]も使用します)。同期後にこの参照内にない画像はすべて削除されます。

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

あなたは良い提案があれば教えてください。どんな提案も大歓迎です。

注:私はCoreDataに画像を保存することについて閉鎖されたトピックをいくつか読んだ。しかし、私はそれを経験していないので、今は試してみたいとは思っていません。だから、もしそれが本当に必要でなければ、私は後でそれを試してみたいです。私はのように深刻に行くことにしました

最後に

はCoreDataを使用するように私のアプリを移行する、と述べました。しかし、私はwriteToFileを使って、製品の情報をどのように保存するかを最初に調べることがあります。グラバーが言ったように、新しいことを試すことは悪くない。結局、私たちは何かを得るでしょう。

+1

現在の方法は問題ありません。コアデータはたぶん、製品のデータを格納するために(テーブルを1つ使用して)大量に使用される可能性があります – user523234

答えて

5

あなたの変更はCoreDataのみです。製品の詳細と画像のローカルパスをデータベースに保存しますが、実際の画像ファイルはストレージに保存されます。あなたのアプリのDocumentsディレクトリ内のディレクトリ。 CoreDataは、すべてのデータをアーカイブすることは決してできないパフォーマンスを提供します。 CoreDataの経験がなければ、アーカイブを使った複雑なソリューションを考えたり、ファイルの追跡などをするよりも、ドキュメントを読んで実装する時間を節約できると思います。そして、次のプロジェクトでCoreDataを経験します:) 2-in-1

+2

はい、NSDocumentDirectoryの代わりに 'NSCachesDirectory'を使用します –

+0

Hmmは、アプリのアップデート後に保存されますか? – graver

+1

更新されていなくても、iOSが空き領域を感じると、NSCacheDirectoryからデータが削除されます。したがって、キャッシュディレクトリに永続データを保存することはお勧めしません。 – UPT

関連する問題