2

我的汽车对象有四个乘客对象。汽车需要知道乘客坐在哪里,但反向关系没有意义,即frontPassengerSeatOccupant合乎逻辑,但carWhosFrontPassengerSeatImSittingIn似乎毫无意义(那么我需要另外三个座位来代替其他三个座位),我宁愿只是有一个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

有两种方法可以做到这一点:提供一个代表空座位的对象,或者创建一个Seat包含参与者的中间对象。

Core Data 将有序关系建模为NSOrderedSet. NSOrderedSet连续存储对象(即它不包含任何nil值) 您可以创建一个虚拟对象来表示一个未占用的座位。您需要跟踪“null occupant”对象,我想您最终会遇到很多复杂的if ([occupant isNullOccupant])逻辑来处理这种特殊情况。

另一种我认为更简洁的解决方案是拥有三个实体:CarSeatOccupant。汽车将与 具有一对多关系Seat,而 aSeat将与 具有一对一关系Occupant。您的模型将如下所示:

Car <-->> Seat <<--> Occupant
于 2012-05-24T17:52:51.843 回答