[解決済み] ベストプラクティス?- Core Data Entity AttributeとしてのArray/Dictionary [終了しました]。
質問
Core Dataを初めて使う者です。コレクション型が属性型として利用できないことに気づいたので、配列/辞書型のデータを属性として格納する最も効率的な方法を知りたいです(例えば、通り、都市などの住所を構成する要素は、個別のエンティティを必要とせず、別々の属性/フィールドよりも辞書/配列として格納する方が便利です)。ありがとうございました。
どのように解決するのですか?
Core Dataには、quot;native"の配列や辞書型がありません。このため
NSArray
または
NSDictionary
を変換可能な属性として指定します。これによって
NSCoding
を使用して配列または辞書をシリアライズし
NSData
属性で指定します (そしてアクセス時に適切にデシリアライズします)。この方法の利点は、簡単であることです。欠点は、配列や辞書に問い合わせることができないこと (データストアに BLOB として保存されます)、 コレクションが大きい場合は、コレクションの一部を読んだり変更したりするためだけに データストア (SQLite データストアの場合) との間で大量のデータを移動しなければならない可能性があることです。
もうひとつの方法は、Core Dataの多対多関係を使用して、配列や辞書コレクションのセマンティクスをモデル化することです。配列の方が簡単なので、そちらから始めましょう。もし配列のような機能が必要なら、集合をソートするか (フェッチしたプロパティを使用すると便利です)、配列の項目を保存するエンティティにインデックス属性を追加してインデックスを自分で管理しなければなりません。均質な配列 (すべての項目が同じ型) を格納する場合は、 配列のエンティティをモデル化するのは簡単です。そうでない場合は、項目データを格納するために変換可能な属性を使用するか、 項目エンティティのファミリを作成するかを決定する必要があります。
ディクショナリーをモデリングするには、キーと値を格納するエンティティのセットに対して、多対一のリレーションシップが必要になる可能性が高い。キーと値の両方は、前述の配列のアイテム・エンティティに類似している。したがって、これらはネイティブの型(事前に知っている場合)、変換可能な属性、または型固有のエンティティ・ファミリーのインスタンスへのリレーションのいずれかである可能性があります。
少し難しく聞こえるかもしれませんが、そうなのです。Core Dataのようなスキーマ依存のフレームワークに、任意のデータを押し込んでいくのは大変なことなのです。
住所のような構造化されたデータでは、ほとんどの場合、実体を明示的にモデル化することに時間をかける方が簡単です(例えば、住所の各部分に対応する属性など)。辞書をモデル化するための余分なコードを省けるだけでなく、UIも簡単になり(バインディングは単に動作するだけです)、検証ロジックなどもCore Dataで処理できるため、非常に明確になります。
更新
OS X 10.7以降、Core Dataには配列の代わりに使用できる順序付きセット型が含まれています。10.7以降をターゲットにしている場合、これは順序付き(配列のような)コレクションのための最良の解決策です。
関連
-
[解決済み] dispatch_after - GCD in Swift?
-
[解決済み] アーキテクチャ i386 のシンボルが見つかりませんでした。
-
[解決済み] FBLoginVIewをカスタマイズするには?
-
非静的宣言に続く "****"の静的宣言
-
[解決済み] NSDictionary または NSMutableDictionary にキーが含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み] C言語で純粋にiOSアプリを書く方法
-
[解決済み] objectForKeyとvalueForKeyの違い?
-
[解決済み】浮動小数点値の比較はどのくらい危険か?
-
[解決済み】コンパイルの警告:アーキテクチャi386のファイルを処理するルールがない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】開発者の身元が確認できないため開けない
-
[解決済み】Objective-C。NULL、nil、@""の違いは何ですか?
-
[解決済み] iPhoneでObjective-Cはガベージコレクタを搭載しているのか?
-
[解決済み] objcの "pi "と "M_PI "の違いは何ですか?
-
[解決済み] プロジェクト内の単一ファイルのARCを無効にするにはどうしたらいいですか?
-
[解決済み] iOS 8で位置情報サービスが利用できない
-
[解決済み】isEqual:とハッシュをオーバーライドするためのベストプラクティス
-
[解決済み】NSStringが特定の文字で始まるかどうかを確認する方法
-
[解決済み】新しい自動リファレンスカウント機構はどのように機能するのですか?
-
[解決済み] [Solved] UITableViewがReloadDataを完了したことを伝えるには?