0

Core Data で「Transformable」属性を使用して画像を保存する場合、Core Data はファイル サイズに基づいて永続ストアに保存する場合と保存しない場合があることを理解しています。通常、画像を保存する場所は気にしませんが、このアプリでは、アプリの最初の起動時にインターネット接続が見つからない場合に備えて、事前にシードされたデータベースと共に出荷する必要があります。したがって、基本的には、データベースのスナップショット (画像を含む) を取得し、アプリの初回起動時にそれをロードしたいと考えています。

私の質問は、Core Data が何らかの理由で永続ストアを使用しないことを決定した場合、事前にシードされたデータベースをロードすると、イメージは引き続きロードされるのでしょうか? それとも、ユーザーが自分のデバイスにインストールしたときに存在しなくなった魔法の領域にイメージが保存されたために壊れますか?

4

2 に答える 2

2

属性を変換可能にすることは、外部ストレージの使用とは関係ありません。[外部レコード ファイルに保存] オプションは、バイナリ アトリビュートとトランスフォーマブルの両方で使用できますが、いずれも必須ではありません。

変換可能で外部レコード ファイル使用する属性がある場合、Core Data が独自の文書化されていないロジックに基づいて (ただし、おそらくサイズをチェックすることによって) 外部ファイルを実際に使用するかどうかを決定するのは正しいことです。これらの外部ファイルは、データ ストアが配置されているサブディレクトリに保存されます。データ ストアの名前が の場合Foo.sqlite、そのファイルが見つかったディレクトリと同じディレクトリに という名前のディレクトリがあります.Foo_SUPPORT/_EXTERNAL_DATA/。これには、いくつかの方法で対処できます。

  • Foo.sqliteドットファイルを含むディレクトリ全体をコピーします。外部参照ディレクトリへのパスは文書化されておらず、(理論的には) 変更される可能性があるため、これが推奨されます。外部参照を取得しますが、ディレクトリ名をハードコードする必要はありません。
  • ディレクトリの場所はわかっているので、ディレクトリを直接コピーします。上記の理由から、おそらくあまり良い考えではありません。

または、必要に応じて、外部参照を使用しないでください。それらはどの属性にも必要ありません。必要に応じて、モノリシックな SQLite ファイルにすべてのデータを含めることができます。

于 2013-05-21T21:08:42.240 に答える
0

画像に外部ストレージを使用するようにコアデータに指示するだけで、いつ使用するかを把握して常に使用する必要がなくなります。プロパティのコア データ インスペクターで、外部ストレージを使用するようにプロパティを割り当てるオプションを見つけることができます。

于 2013-05-21T19:27:50.520 に答える