0

これを 2 時間デバッグしようとしてきたので、眠らなければなりません。最初に、キーワードを使用して多くの同様の投稿を検索して見つけました: 多くのエンティティは同じタイプで、これは次のとおりです: コアデータ: 同じタイプの2つの関係の逆関係

しかし、役に立たない。何が起こっているのか: 2 つの型を持つデータ モデルがあります。たとえば、個人がいて、その人は 4 つのメール リストを持つことができます。電子メールの種類は独自のものなので、各リストに対して 4 つの異なるセット (関係) を個人に保存するようにします。

基本的に、1 つのセットを取得すると、すべてのセットが取得されます。4 つのリストはすべて 1 になり、逆数をどのように設定しても問題ないようです。実際、これらの変更により、全体が何も保存されず、ダウンロード時にすべての nil オブジェクトが保存されませんでした。これより前は、正常に機能していました (4 つのリストすべてを 1 つのセットに押し込むことを除いて)。私が更新したのは、リレーションシップのデータ モデルだけでした。ファイルを間違った順序でエクスポートした可能性がありますが、それが関連しているかどうかはわかりません。

誰かが以前にこれを尋ねたかどうかを見つけるためのキーワードの組み合わせを見つけることができません。どうやって出てこないのかわかりません。私がやっているのは基本的な抽象化です。1つのボックスを見落としたと思い続けています。

要約すると、私には人がいて、人には2つのリストがあります。次のように追加します。person.businessEmailsList = DownloadBusinessEmails;

後で、person.friendEmailsList にアクセスし (もちろん、正しいコア データ呼び出しを使用して)、友達だけでなく、すべてを取得します... 友達、ビジネスのすべて

任意の提案をいただければ幸いです

4

1 に答える 1

2

考えられる解決策は 2 つあります。

まず、使用するアプローチを使用できます。他のエンティティからの対応する逆の関係も持っていることを確認してください。したがって、同じエンティティに対して 2 つの関係がある場合、そのエンティティには 2 つの異なる関係が必要です。例えば

Person.friendsLists --->> List
Person.businessLists --->> List

List.friendPerson ---> Person
List.businessPerson ---> Person

より柔軟なアプローチは、リストに追加の属性を持たせることですtype(何らかの種類の数値である可能性がありますenum)。

typedef enum {Friend = 1, Business } ListType;

これをファイルに入れることができList.hます。フレンド リストだけにアクセスするには、次のようにします。

NSSet *friendList = [person.lists filteredSetUsingPredicate:
       [NSPredicate predicateWithFormat:@"type = %@", @(Friend)]];

これは入力するのが少し難しいかもしれないので、アクセサ メソッドを Person.m に入れることで簡略化できます (.h で宣言します)。

-(NSSet*)friendsLists {
    return [person.lists filteredSetUsingPredicate:
       [NSPredicate predicateWithFormat:@"type = %@", @(Friend)]];
}

これで、通常の便利な でリストにアクセスできますperson.friendsLists

于 2012-11-27T10:24:46.567 に答える