【问题标题】:Advanced DataModel in Xcode with CoreDataXcode 中的高级数据模型与 CoreData
【发布时间】:2011-02-27 09:28:02
【问题描述】:

我有一个关于我想与 CoreData 一起使用的相当高级的 DataModel 的问题。

在详细介绍我到目前为止所做的事情之前,我先描述一下我想做什么。

我有一份入住一个房间并有偏好的酒店客人名单。一旦准备就绪,用户应该选择一个客人并查看数据,还应该能够添加新客人,选择房间(也由应用程序维护)并选择他们的偏好(用户还可以添加新的偏好)。客人可以没有或有很多偏好。

这就是我目前所拥有的。我创建了 3 个实体: - 有房间号的房间 - 名称偏好 - 带有名称的GuestInfo -> 带有这些关系室(目标房间)和首选项(具有“多对多关系”的目标偏好)

现在,我完成了所有这些并创建了托管对象类。到目前为止,一切都很好。问题是我收到了一些警告。

  1. GuestInfo.room -- 关系没有逆向
  2. GuestInfo.prefs -- 多对多关系没有反向关系:这是一个高级设置(对于特定关系,没有对象可以位于多个目标中)

这只是我可以忽略的警告吗?我的意思是对于房间,每个客人总是只有一个房间号,但是一个房间里可以有更多的客人,所以不能在这里放置任何反比关系。同样对于偏好,每位客人可以没有或更多偏好。

【问题讨论】:

  • 希望看到你的模型截图吗?看图会让这更容易理解。

标签: cocoa xcode core-data datamodel


【解决方案1】:

这些警告可以忽略(参见question),但很容易添加反向关系以使 Core Data 满意。将 Room 的关系添加到 GuestInfo,将 Preference 的关系添加到 GuestInfo,并确保选择相反的关系。我认为这些是一对一的,因为每个房间只有一个客人信息。这可能会产生副作用,即当您在客人信息上设置房间时,该房间的任何其他客人信息都将被删除。如果不希望这样做,您可以将关系设为多对一。

【讨论】:

  • 这是一个糟糕的建议。警告,尤其是反向关系警告,绝不应被忽视。
  • 我不打算建议他忽略它们(那将是糟糕的建议)。不过,重读我的答案,我可以看到我确实听起来像我说的那样。 “罐头”的意思是,“如果你需要钱,你可以去抢银行,但是……”语气有时会在文本中丢失。
【解决方案2】:

在 Objective-C 中,警告应该绝不被忽略。在处理 Core Data 时,这是双重事实。在运行时将每个警告视为错误。

至于逆关系,你应该总是有逆关系。否则,性能将受到影响,并且数据完整性面临很高的风险。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 2011-04-13
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    相关资源
    最近更新 更多