针对特定用例的自引用核心数据模型

时间:2014-04-23 15:53:08

标签: core-data

我已经看到其他帖子可以自引用核心数据实体,但我觉得我的用例有点不同,我很难理解如何连接。

我有一个Person实体,我想跟踪两件事:
- 一组Person实体,其用户“访问过”的配置文件 - 已查看“此”用户个人资料的人员实体数组

逆逻辑使得难以理解。

我有用户A,用户B。

如果用户A访问用户B,则应设置以下关系:
- 用户A的访问个人资料显示用户B. - 用户B应该看到用户A访问了他。

这是To-Many关系,因为只有当你知道你跟随谁以及谁跟着你时,事情才会“有趣”......: - )

我是否比这更复杂? : - (

我尝试了什么:

Person Entity
-visitedProfiles : inverse is viewedProfiles (To-Many relationship)
-viewedProfiles : inverse is visitedProfiles (To-Many relationship)

Result:  
 User A --> User B (user A visists user B)
 User A sees User B in BOTH (visitedProfiles and viewedProfiles) relationship.

Side-effect:
Also, regardless of how many profiles I visit, "visitedProfiles" and "viewedProfiles" always has only 1 item in the array (ie. the last profile I visited)

2 个答案:

答案 0 :(得分:0)

您对关系的定义看起来不错。你可以打电话给

[a addVisitedProfilesObject:b];

[b addViewedProfilesObject:a];

b添加到a.visitedProfiles a添加到b.viewedProfiles

答案 1 :(得分:0)

这不是一个特别复杂的案例。不过,我个人觉得你的选择有点令人困惑。 “ViewedProfiles”和“visitedProfiles”对我来说听起来并不像对方。那么“viewProfiles”和“观众”呢?

尽管选择了单词,但是按照您的描述设置关系。如果您将B添加到“A的观看者”中,那么B的“ViewedProfiles”也将更新。

了解最近的观看/访问的副作用需要额外的工作。您可以为查看者/查看者使用有序关系;感觉这是最简单的事情。或者您可以添加一个新实体,即访问,它会记录查看者,查看者以及访问的时间/日期。但第二种方法确实更复杂。