iOSのCore Dataを外部記録ファイルに保存する 質問する

iOSのCore Dataを外部記録ファイルに保存する 質問する

ここで質問するのは初めてなので、十分な情報を提供できない場合は寛容に受け止めてください。基本的に、私の iOS アプリの一部では、ユーザーが写真を撮影して Core Data ストアに保存できるようにします。属性は Transformable タイプで、NSManagedObject サブクラスを作成しました。これを使用して、ユーザーが提供した新しい画像を画像属性に設定するだけです。

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

調べてみたところ、外部記録ファイルに保存オプションはiOSアプリでも利用できるものの、OS X環境にのみ適用できるという意見もあります。しかし、Appleの「iOS 5の新機能」doc (Core Data の下の最後から 2 番目の項目、末尾近くにあります):

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

そこで私の質問は、誰が正しいのかということです。Apple が iOS アプリにこのオプションを提供するという間違いを犯し、Mac を使用しない限り実際には何も起こらないというのは本当でしょうか。それとも、実際に何かが起きるが私が正しく設定していないのでしょうか。それとも、想定どおりに機能していてパフォーマンスがとにかく悪いのでしょうか。

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

すでに質問されている場合は大変申し訳ございません。通常であれば、自分で解決できるのですが、Core Data は私にとってまったくの初心者で、どうやって初期設定をうまくやり遂げたのか、いまだによくわかりません。何かお力添えいただけると幸いです。

ベストアンサー1

誰が正しいですか?

このクラスの iOS ドキュメントセットにはおよびメソッドについてNSAttributeDescription記載されているため、Apple 側に間違いがある可能性はほとんどありません。allowsExternalBinaryDataStoragesetAllowsExternalBinaryDataStorage:

何か間違ったことをしているのでしょうか、それともとにかく遅いのでしょうか?

あなたが言った

属性は変換可能なタイプです

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

そうでない場合、ここには情報が足りません:

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

また、Apple のドキュメントには次のように記載されています。

Core Data は値ごとに経験的に決定します…

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

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

お役に立てれば。

おすすめ記事