2

私の車のオブジェクトには 4 つの乗客のオブジェクトがあります。車は乗客がどこに座っているかを知る必要がありますが、逆の関係は意味がありません。つまり、frontPassengerSeatOccupant論理的ですが、carWhosFrontPassengerSeatImSittingIn無意味に思えます (その場合、残りの 3 席には他に 3 席が必要になります)。 1つ持っていcarImSittingInます。

CoreData は、「高度な」ケースを除いて、すべてに対して逆の関係を持つことを推奨しているので、それを守ろうとしています。occupantsそこで、シート 0 が運転席、1 が助手席、2 が後部運転席、3 が後部乗客という順序付けられた関係を作成しようとしています。配列にプレースホルダーを配置できないため、座席 1 に誰もいないが、座席 2 または 3 に誰かがいる場合に問題が発生します。

逆の関係を維持しながら、これらすべての余分な無意味なプロパティを持たずに、この順序付けられた、おそらく空席の問題を実装するためのクリーンな方法は何でしょうか?

4

2 に答える 2

2

Occupants オブジェクトに、それぞれの乗員に設定する seatNumber プロパティ (上記のように整数を使用できます) を含めるだけです。

次に、プレースホルダーとしてのみ使用される「空の」スポットを使用せずに、注文されたセットに 1 ~ 4 個の Occupant オブジェクトを含めることができます。

次に、 Car オブジェクトに次のようなメソッドを作成します。

- (BOOL)addOccupant:(Occupant *)occupant {
    // Make sure that occupant.seatNumber is valid.
    // Check your existing occupants to make sure nobody is already in that seat.
    // Add them to the relationship (your ordered set) in the proper order.
}
于 2012-05-24T17:50:30.950 に答える
1

これを行うには 2 つの方法があります。空席を表すオブジェクトを提供するかSeat、参加者を含む中間オブジェクトを作成します。

Core Data モデルは、関係を として並べ替えNSOrderedSetます。NSOrderedSetオブジェクトを連続して格納します (つまり、値は含まれませんnil) 空席を表すダミー オブジェクトを作成できます。if ([occupant isNullOccupant])「null占有者」オブジェクトを追跡する必要があり、この特殊なケースに対処するために多くの複雑なロジックが必要になると思います.

私がよりクリーンだと思うもう 1 つの解決策はCar、 、Seat、およびの 3 つのエンティティを使用することOccupantです。車は と対多の関係を持ち、車は とSeatSeat一の関係を持ちOccupantます。モデルは次のようになります。

Car <-->> Seat <<--> Occupant
于 2012-05-24T17:52:51.843 に答える