私はコアデータを初めて使用しています。私は、コレクション型が属性型として利用できないことに気付きました。最も効率的な方法が配列/辞書型データを属性として格納することを知りたいと思っています(例えば、通りや都市などのアドレスを構成する要素別のエンティティを必要とせず、別個の属性/フィールドよりも辞書/配列としてより便利に格納される)。ありがとうございました。ベストプラクティス? - コアデータエンティティ属性としての配列/ディクショナリ
答えて
コアデータに「ネイティブ」配列または辞書型はありません。変形可能な属性としてNSArray
またはNSDictionary
を格納できます。これはNSCoding
を使用して配列または辞書をNSData
属性にシリアル化します(アクセス時に適切に逆シリアル化します)。このアプローチの利点は簡単だということです。欠点は、配列や辞書(データストア内のBLOBとして格納されている)にクエリを実行できないことと、コレクションが大きい場合は、データストアから/にデータを移動する必要があることですSQLiteデータストア)を使用して、コレクションの小さな部分を読み取ったり変更したりすることができます。
代わりに、Core Data-Manyリレーションシップを使用して、配列または辞書コレクションのセマンティクスをモデル化することもできます。配列が簡単なので、それを使い始めることができます。コアデータの多対多関係は実際にはセットをモデル化しているので、配列のような機能が必要な場合は、セットをソートするか(フェッチされたプロパティを使用してこれを行うのが便利です)、エンティティに追加のインデックス属性を追加するか配列アイテムを格納し、インデックスを自分で管理します。同種の配列を格納する場合(すべてのエントリが同じ型)、配列エンティティのエンティティ記述をモデル化するのは簡単です。そうでない場合は、変換可能な属性を使用してアイテムデータを格納するか、アイテムエンティティのファミリを作成するかを決定する必要があります。
辞書をモデリングするには、キーと値を格納するエンティティのセットと多対多の関係が必要になります。キーと値の両方は、上で説明した配列の項目エンティティに似ています。したがって、それらはネイティブ型(事前にそれらを知っている場合)、変形可能な属性、または型固有のエンティティのファミリからのインスタンスへの関係のいずれかになります。
このすべてが少し難しいと思われる場合は、それがあります。コアデータのようなスキーマ依存フレームワークに任意のデータを集約するのは難しいです。
アドレスのような構造化データの場合、エンティティを明示的にモデル化する時間(アドレスの各部分の属性など)はほとんどいつもより簡単です。辞書をモデル化するための余分なコードをすべて避けるだけでなく、これにより、UIがより簡単になります(バインディングは「うまくいくでしょう」)。 OS X 10.7のよう
更新
、Core Dataは、配列の代わりに使用することができる順序付けられたセットのタイプを含みます。 10.7以降をターゲットにできるのなら、これは順序付けされた(配列のような)コレクションにとって最適なソリューションです。
が出向...おそらくあなたがあなたの鍵を覚えている辞書よりも使いやすくなって - 私はすでに考えたものを確認したが、私は変換可能な属性については知りませんでした。 – jkp
@バリー私は好奇心が強いです、いつ変換可能な "正しい"時間を使うのでしょうか?エンティティに文字列が配列されていて、配列に100個以上のアイテムが含まれていないとし、文字列が平均英語の単語であれば、transformableを使用できますか? – pixelfreak
@pixelfreakトランスフォームの使用は、コレクション内のアイテムをどのように使用する必要があるかによって異なります。それらに対して照会する必要がある場合、またはそれらの一部またはすべてを遅延ロードできるようにする場合は、変換可能な属性は機能しません。遅延ロードを必要としない場合は、クエリを実行する必要はなく、アイテムのすべて*が必要な場合もありません。変形可能な属性が機能する場合もあります(実装が容易な場合もあります)。 –
私も同様の問題がありました。私の場合は、文字列の配列をマップしたいと思っていました。私はBarryの助言に従って、ついにそれを働かせました。ここにいくつかのコードがどのように見えるかがあります(これは、これに繋がる他の誰かのことをうまく明確にします)...
私のエンティティは、このようなものになります
:@interface AppointmentSearchResponse : NSManagedObject
@property (nonatomic, retain) NSSet *messages;
@end
は、オブジェクトモデルコード(コアデータ)コードを管理するマイはこのようなものになります。
NSEntityDescription *entityDescription = [[NSEntityDescription alloc] init];
[entityDescription setName:@"AppointmentSearchResponse"];
[entityDescription setManagedObjectClassName:@"AppointmentSearchResponse"];
NSMutableArray *appointmentSearchResponseProperties = [NSMutableArray array];
NSAttributeDescription *messageType = [[NSAttributeDescription alloc] init];
[messageType setName:@"messages"];
[messageType setAttributeType:NSTransformableAttributeType];
[appointmentSearchResponseProperties addObject:messageType];
[entityDescription setProperties:appointmentSearchResponseProperties];
をので、ここで重要な項目は以下のとおりです。
- プロパティタイプにNSSetを使用しています
- 私は、Core Data Managed Object Modelの属性タイプとしてNSTransformableAttributeTypeを使用しています。アドレスの文字列フィールドを持つエンティティを作る
initメソッド内でこのコードをAppointmentSearchResponse.mの中に入れていますか? – Chicowitz
- 1. コアデータエンティティ属性の合計配列
- 2. コアデータエンティティの属性として構造体を持つ
- 3. リテラルオブジェクトの属性としての配列
- 4. PHP:配列としての属性
- 5. コアデータエンティティ内の属性の編集/保存
- 6. コアデータエンティティの属性値を読み取る
- 7. NSPredicateを使用してコアデータエンティティのNSArray属性を検索する
- 8. 画像alt属性のベストプラクティス
- 9. Mysqlアーキテクチャのベストプラクティス:ユーザ属性
- 10. Htmlタグ属性インデントのベストプラクティス?
- 11. 配列型のカスタム属性
- 12. Rubyモデルの配列属性
- 13. Ruby配列の属性
- 14. 配列内の属性ポイント
- 15. コアデータエンティティをエクスポートするためのベストプラクティス
- 16. Javaクラスの属性としての配列ですか?
- 17. jQueryは属性配列内のオブジェクトのデータ属性値と一致します
- 18. コアデータエンティティの属性の数を取得する
- 19. コアデータエンティティのローカライズ可能な属性値のモデルですか?
- 20. コアデータエンティティの属性のデフォルト値をローカライズする方法
- 21. 属性値として配列を渡し
- 22. ディクショナリのキーとしての整数配列
- 23. ディクショナリ配列の辞書?
- 24. コアデータエンティティの属性を効率的にリセットする方法
- 25. クラスの新しいインスタンスの属性としての文字列の配列 - Ruby
- 26. PHP配列CSS属性セレクタ
- 27. データ属性リスト配列
- 28. 属性クラス要素を配列として使用
- 29. コアデータエンティティにJSON配列を挿入
- 30. wekaの文字列配列属性
は – Daniel