22

ここで質問するのは初めてなので、十分な情報を提供していない場合は、簡単に行ってください。基本的に私の iOS アプリの一部では、ユーザーがコア データ ストアに保存される写真を撮ることができます。属性は Transformable 型で、NSManagedObject サブクラスを作成しました。これを使用して、その画像属性をユーザーが提供する新しい画像に設定するだけです。

大きなファイルを Core Data に保存するのは良くないことだとわかっているので、Core Data エンティティの画像属性の下にある [外部レコード ファイルに保存] オプションを見て興奮しました。ただし、私のアプリのパフォーマンスはそうではなく、iPhone 5 でほんの数枚の画像を読み込むのに数秒かかります (それほど時間はかからないように聞こえますが、iPhone 5 がどれほど強力かを考えると、古いデバイスではもっと時間がかかる可能性があります)。同じデータ)。

いろいろ調べてみたところ、外部レコード ファイルに保存するオプションは、iOS アプリで利用できるにもかかわらず、OS X 環境にしか適用できないという人もいます。ただし、これはAppleの「iOS 5の新機能」ドキュメントでも見ました(コアデータの下の最後から2番目の項目で、最後の近くにあります):

管理対象オブジェクトは、順序付けられた関係と属性値の外部ストレージという 2 つの重要な新機能をサポートしています。管理オブジェクト属性の値を外部レコードとして保存できるように指定すると、Core Dataはデータをデータベースに直接保存するか、管理する別のファイルに URL を保存するかを値ごとにヒューリスティックに決定します。あなたのために

だから私の質問は、誰が正しいですか? Apple が iOS アプリにこのオプションを与える際に間違いを犯したというのは本当ですか? Mac を使用していない限り、実際には何もしません。やるべきことをしているのに、とにかくパフォーマンスが悪いのですか?

大きなファイル (画像など) をファイルとして保存し、代わりにそれらの URL をコア データ ストアに保存する方法を説明するガイドを見たことがありますが、これは基本的にこの新しいオプションが行っていること、または行うべきことであるため、これらのガイドに従うことが役立つかどうかはわかりません。

これが以前に尋ねられた場合、本当に申し訳ありません。通常、私は自分でこれを理解するのに問題はありませんが、Core Data は私にとってまったく新しいものであり、初期設定でどのようにきしむことができたのかまだわかりません. あなたが提供できる助けをありがとう!

4

2 に答える 2

8

誰が正しいですか?

NSAttributeDescriptionこのクラスの iOS docset にはallowsExternalBinaryDataStorageおよびsetAllowsExternalBinaryDataStorage:メソッドが記載されているため、Apple の間違いである可能性はほとんどありません。

あなたは何か間違ったことをしていますか、とにかく遅いですか?

あなたが言った

属性は Transformable タイプです

しかし、Core Data にはBinary data型があります。おそらくこれだけが外部ストレージ機能にリンクされています。

そうでない場合、ここには十分な情報がありません。

  • 何枚の写真を保存しますか?
  • サイズは? 
  • すべての画像を自動的に取得しますか?

また、Apple doc には次のように記載されています。

Core Data は値ごとにヒューリスティックに決定します…</p>

  • 移行を使用しましたか、それとも最初から始めていますか?

アプリのサンドボックスを調べて、写真が本当に CoreData の外に保存されているかどうかを確認できます。

お役に立てれば。

于 2013-05-07T10:54:44.483 に答える
3

良い質問!

この投稿を確認してください: 組み込みの CoreData オプションを使用して外部の場所にブロブを保存する

どうやらそれはうまくいくはずです。また、シミュレーターで試して、アプリケーション データ フォルダーを調べて、フォルダーが説明どおりに作成されているかどうかを確認する必要があります (~/Library/Application Support/iPhone Simulator/... - 残りのパスを確認します)。また、sqlite3 コマンドを使用して sqlite ファイルを検査し、バイナリ データがデータベースにあるかどうかを確認することもできます。

手動で画像をフォルダーに保存し、代わりにそれらへの参照をデータベースに保存することを好むため、個人的にはこのオプションを使用していません。このようにして、表示するファイルから UIImage オブジェクトを作成するのが簡単になり、何がどこに行くのかなどをより適切に制御できるようになります。ただし、余分な労力がかかります!

それがあなたを助けることを願っています。

于 2013-05-07T16:24:22.157 に答える