如何在Core Data中使用可选值创建有序关系?

时间:2012-05-24 17:43:16

标签: iphone core-data

我的车对象有四个乘客对象。汽车需要知道乘客坐在哪里,但反向关系没有意义,即frontPassengerSeatOccupant是合乎逻辑的,但carWhosFrontPassengerSeatImSittingIn似乎毫无意义(那时我需要另外三个人)三个座位),我宁愿只有一个carImSittingIn

CoreData建议我除了“高级”案例之外都有反向关系,所以我试图遵守这一点。所以我试图做一个有序的occupants关系,其中0号座位是驾驶员,1号是前排乘客,2号是后方驾驶员,3号是后排乘客。当我在座位1中没有任何人时会出现问题,但我在座位2或3中有人,因为我不能在阵列中放置占位符。

在维持反向关系的同时实现这个有序的,可能是空座位问题的干净方法是什么,而不是拥有所有这些额外的无意义属性?

2 个答案:

答案 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对象。

核心数据模型将关系排序为NSOrderedSetNSOrderedSet连续存储对象(即它不包含任何nil值)您可以创建一个表示未占用座位的虚拟对象。你需要跟踪“null Occupant”对象,我想你最终会遇到很多复杂的if ([occupant isNullOccupant])逻辑来处理这个特例。

另一种我认为更清洁的解决方案是拥有三个实体:CarSeatOccupant。汽车与Seat有很多关系,而SeatOccupant有一对一的关系。你的模型看起来像这样:

Car <-->> Seat <<--> Occupant