我的车对象有四个乘客对象。汽车需要知道乘客坐在哪里,但反向关系没有意义,即frontPassengerSeatOccupant
是合乎逻辑的,但carWhosFrontPassengerSeatImSittingIn
似乎毫无意义(那时我需要另外三个人)三个座位),我宁愿只有一个carImSittingIn
。
CoreData建议我除了“高级”案例之外都有反向关系,所以我试图遵守这一点。所以我试图做一个有序的occupants
关系,其中0号座位是驾驶员,1号是前排乘客,2号是后方驾驶员,3号是后排乘客。当我在座位1中没有任何人时会出现问题,但我在座位2或3中有人,因为我不能在阵列中放置占位符。
在维持反向关系的同时实现这个有序的,可能是空座位问题的干净方法是什么,而不是拥有所有这些额外的无意义属性?
答案 0 :(得分:2)
让Occupants对象包含你为每个占用者设置的seatNumber属性(你可以使用上面想法中的整数)。
然后你可以在你的有序集合中拥有1-4个占用对象,而没有“空”点用作占位符。
然后我会在你的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.
}
答案 1 :(得分:1)
您可以通过以下两种方式执行此操作:提供表示未占用席位的对象,或创建包含参与者的中间Seat
对象。
核心数据模型将关系排序为NSOrderedSet
。 NSOrderedSet
连续存储对象(即它不包含任何nil
值)您可以创建一个表示未占用座位的虚拟对象。你需要跟踪“null Occupant”对象,我想你最终会遇到很多复杂的if ([occupant isNullOccupant])
逻辑来处理这个特例。
另一种我认为更清洁的解决方案是拥有三个实体:Car
,Seat
和Occupant
。汽车与Seat
有很多关系,而Seat
与Occupant
有一对一的关系。你的模型看起来像这样:
Car <-->> Seat <<--> Occupant