web-dev-qa-db-ja.com

画像をCoreDataに保存しますか、それともファイルとして保存しますか?

画像も含むデータセットがあります。このデータをキャッシュしたい。それらをファイルシステムまたはコアデータに保存する必要がありますか?その理由は何ですか?

32
Abhinav

2つの主なオプションがあります。

  1. ファイルをディスクに保存してから、イメージへのパスをコアデータに保存します
  2. 画像のバイナリデータをコアデータに保存する

私は個人的に最初のオプションを好みます。それは、実際の画像をいつメモリにロードするかを選択できるからです。また、生データの形式を覚えておく必要がないことも意味します。 alloc/init新しいUIImageオブジェクトへのパスを使用できます。

36
Dave DeLong

バイナリラージオブジェクト(BLOB)の処理方法については、Core Dataプログラミングガイドの this をお読みください。実際のCoreDataストア内に格納する必要があるバイナリデータと格納しないサイズについては、経験則があります。

また、 コアデータiPad/iPhone BLOBと20k PDFのファイルシステム もご覧ください。

Core Dataストア内にバイナリデータを配置する場合は、実際のデータを保持する「Data」エンティティを用意し、「Image」エンティティを分離することをお勧めします。 2つのエンティティ間に関係を作成して、「データ」が実際に必要な場合にのみロードされるようにします。 「画像」エンティティは、タイトル、データ型などのメタデータを保持できます。

16
westsider

ユーザーデータ/ファイルを保存する場所に関して(ユーザーが何らかの方法でファイルを移動、削除、または変更して画像が使用できなくなることを警戒していたため、「アプリケーションサポート」は適切な場所であることがわかりました。後で回復してアプリケーションで使用する)

例としてMinecraftを取り上げます。 "〜/ Library/Application Support/minecraft/saves /"

以前のコメントに同意し、画像へのパスをコアデータに保存しますが、それ以外の場合は、画像自体をpngファイルとしてコアデータ外の独自のフォルダーに保存します。

0
eric bob