4

私のモデルには、エンティティ「Filter」とエンティティ「Color」があります。それらの間に2つの「To-Many」関係、「背景」と「前景」が必要です。(つまり、各「フィルター」には、すべて「色」タイプの背景色の配列と前景色の配列が含まれています)。

私には2つの問題があります。まず、関係を設定するとき、「色」の逆は1つの値しか持てません(これは、私が望むことを実行できないことを意味すると思います)。次に、背景のみまたは前景のみをフェッチする述語を作成する方法がわかりません。私は、以下がそれらすべてを一緒にマージしたものを返すと思います(それが機能した場合):

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Color"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"filter == %@", self];

Colorを2つのForegroundエンティティとBackgroundエンティティに変換することでこれを解決しようとしていますが、1つのエンティティが機能しない理由を理解せずに解決したくありません。ここで何かが足りませんか?

注:これは明らかに私には直感的ではありません。この正確な問題に再び遭遇しましたが、今回は述語を使用していなかったため、すぐに問題を見つけることができませんでした。非常によく似た設定でしたが、子を削除しようとすると最初は消えてしまいましたが、アプリを再起動すると何度も再表示されていました。私が連れ去った子供が多ければ多いほど、私はより多くのことになりました。最終的に、同じ子が両方のリレーションシップ配列にあることに気付きました。モデルのグラフィカルバージョンを見ると、リレーションの1つだけに子に接続された矢印がありました。最後に、私は以前にこの問題を抱えていたことを思い出しました!何が起こっているのかよくわかりませんが、奇妙な方法でマージされた2つの子の「配列」は明らかです。

4

1 に答える 1

4

はい。

多対多関係に関する理論

男の子か女の子のエンティティ CHILD があるとします。各子は、すべての兄弟のセット (対多) を持つことができます。しかし、それぞれの子は、1: 兄弟と 2: 姉妹のすべての 2 つのセット (対多) を持つこともできます。

「兄弟」の逆の関係は「isSiblingTo」(または兄弟)になります。また、「兄弟」と「姉妹」の逆は「isBrotherTo」と「isSisterTo」になります。

両方のエンティティが同じであるため、これは非常に簡単でした。

代わりに、私はクレヨンとおもちゃのセットを持っている子供だとしましょう。私はおそらく、これらのセットの両方に赤いクレヨンを持っています。

つまり、赤いクレヨンは私の CRAYON であり、私の TOY でもあるということです。上記の兄弟の例と同様に、子供の兄弟は兄弟であり、兄弟と姉妹は兄弟であり姉妹でもあります。

アップデート:

両方の関係の一部である必要はありません。兄弟関係なしで子供を持つことができますが、兄弟姉妹関係の両方があり、他の子供たちはそれらと逆の関係になります(これはあなたのカラー+フィルターの例に近いです)

あなたの例に適用

ですから、用途があれば、それは実行可能です。それらの関係を日常の言語で考えて、逆を isForegroundColorTo と isBackgroundColorTo に設定します。

多対多の関係を持つデータ モデル 多対多の関係を持つデータ モデル

カラーモデル定義 カラーモデル定義

フィルタ モデル定義 フィルタ モデル定義

于 2012-05-12T09:59:20.650 に答える