【问题标题】:Inverse relationship warning - ask for practices on using inverse relationship反向关系警告 - 要求使用反向关系的实践
【发布时间】:2010-02-04 15:10:03
【问题描述】:

我有 Order 表,其中包含有关特定订单的信息(何时开始,有多少人等),并且该 Order 表与 Menu Item 表具有 To-Many 关系。我称这种关系为“orderItems”。

编译器给我警告,“Order.orderedItems - 多对多关系不存在反向:这是一个高级设置(对于特定关系,没有对象可以位于多个目标中)”

你通常如何处理反向关系?我是否需要在菜单项上创建一个新关系以指向 Order,并将反向关系设置为“orderedItems”? (事实上​​,我没有理由将这些数据保存在 Menu Item 表中)

有人可以向我解释为什么,或者至少指出我为什么需要在菜单项表上创建反向关系的原因。

提前致谢,

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

    我也遇到了这个警告和问题!这是您需要知道的...

    假设您有两张桌子 - Cars 和 Drivers。您定义了一对一的关系 - 一辆车与一个司机,但没有相反的关系。

    所以现在,如果您创建一辆车并为其分配一个驱动程序,如果您稍后删除该驱动程序,然后尝试访问 car.driver,您的程序将会崩溃。 Car.driver 不会是 nil - 它会使你的程序崩溃。

    所以,如果你不创建一个逆,你永远无法检查是否有东西为零,如果驱动程序已被删除,你甚至根本无法安全地使用 car.driver。

    我不喜欢 XCode 的这种设置方式。它应该默认为反向并且更改它是一件很痛苦的事情。

    设置逆很简单。只需在 XCode 中打开您的 xcdatamodel,单击现有关系,然后选中反向框。

    【讨论】:

    • 我不明白。按照你的类比,你不能访问 car.driver 除非你已经声明它开始,我没有。 (在我的模型中,'drivers' 表需要知道 'cars' 表,但不需要反向)。这只是 Core Data 的“你可能需要一个反向关系,所以让我们发出警告”吗?
    【解决方案2】:

    通常您应该始终添加反向关系。

    不要根据将要生成的表来考虑 Core Data。事实上,Core Data 足够聪明,不会将数据放在多个表中。

    专注于设计满足您需求的数据模型(并添加反向关系)。

    【讨论】:

    • "Core Data 足够聪明,不会将数据放在多个表中。"把所有东西都放在一张桌子上有什么好处?
    • @pat 在存储信息以通过关系链接两个模型方面,Core Data 仅在其中一个表上存储外键(并将其用于两个关系)。对于多对多关系,它会创建连接表并在其中创建新记录。
    猜你喜欢
    • 2018-07-05
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2012-07-09
    • 2012-11-03
    • 2017-09-06
    • 1970-01-01
    相关资源
    最近更新 更多