0

私は現在、CoreDataに関するいくつかの問題に頭を悩ませています。フレームワークが付属しているため、自分のストアに1つのユーザーモデルがありますが、これを制御することはできません。このモデルの永続ストアコーディネーター、管理対象オブジェクトモデル、およびコンテキストは自動的に作成され、タッチすることはできません。その中で、このモデルには単一のユーザーエンティティがあります

一方、私は完全に制御できるプロパティエンティティを含むプロパティモデルを持っています。そこで、いくつかのユーザーエンティティのプロパティを他のストアに保存します。ユーザーエンティティとプロパティエンティティの両方に、外部キーと同様のid属性があります。このモデルには、独自の永続ストアコーディネーター、管理対象オブジェクトモデル、およびコンテキストがあります。

私が今欲しいのは、関連付けられたユーザーエンティティをプロパティエンティティの属性として持つことです。これにより、次のようなキーパスにバインドできるようになりますmyproperty.user.someValueOfTheUserEntity(フェッチされたプロパティを使用する場合、mypropertyが配列になる可能性があることを認識しています)。

ただし、ストア間の関係はサポートされていないため、 FetchedPropertiesを介して弱い関係を使用することを考えました。これは、対応する2つのid属性と一致する必要があります。XcodeでユーザーのFetchedプロパティを作成し、プロパティエンティティのクラスファイルで必要なアクセサーを作成しました(他の質問で提案されているように、Fetchedプロパティによって返される値を配列として扱っています)。

ただし、ターゲットエンティティは完全に異なるストアに存在するため、Xcodeでフェッチされたプロパティの宛先エンティティを設定できません。プロパティストアでユーザーエンティティも定義する必要がありますか?もしそうなら、Core Dataは、そのエンティティが私のプロパティストアからではなく、ユーザーストアからフェッチされることをどのように認識しますか?

一部のスレッドでは、このための構成の使用について言及していますが、「このための構成の使用」について言及している以上のドキュメントは見つかりません。

誰かがクロスストレージフェッチプロパティを設定する方法について教えてもらえますか?#

4

1 に答える 1

0

同じデータモデルを共有する複数の永続ストアを使用できます。

  • 単一のデータモデル(xcdatamodeld)を使用して、すべてのエンティティを追加します
  • 個別のストアファイルに保存する必要があるエンティティの「論理セット」ごとに構成を作成(エディター/構成の追加)
  • エンティティを適切な構成に割り当てる(ドラッグする)
  • 構成済みの永続ストアをコンテキストに追加します(以下を参照)
  • フェッチされたプロパティを構成する
// 1. Add "static", read-only store
[coordinator addPersistentStoreWithType:NSSQLiteStoreType
             configuration:@"your static configuration name goes here..."
             URL:storeUrl
             options:@{
                 NSReadOnlyPersistentStoreOption: @(YES),
                 NSInferMappingModelAutomaticallyOption : @(YES)
             }
             error:&error];
// 2. Add "dynamic", writable content
[coordinator addPersistentStoreWithType:NSSQLiteStoreType
             configuration:@"your dynamic configuration name goes here..."
             URL:storeUrl
             options:@{
                NSMigratePersistentStoresAutomaticallyOption: @(YES),
                NSInferMappingModelAutomaticallyOption : @(YES)
             }
             error:&error];
于 2012-08-07T07:32:48.727 に答える