特定用例的自引用核心数据模型
Posted
技术标签:
【中文标题】特定用例的自引用核心数据模型【英文标题】:self-referencing core data model for specific use case 【发布时间】:2014-04-23 15:53:08 【问题描述】:我看过其他帖子说自引用核心数据实体是可能的,但我觉得我的用例有点不同,我很难理解如何连接。
我有一个 Person 实体,我想跟踪 2 件事: - 用户“访问过”其个人资料的 Person 实体数组 - 一组查看过“此”用户个人资料的 Person 实体
逆逻辑让人难以理解。
我有用户 A,用户 B。
如果用户A访问用户B,需要建立如下关系: - 用户 A 访问的个人资料显示用户 B。 - 用户 B 应该看到用户 A 访问了他。
这是一个对多的关系,因为只有当你知道你关注了谁以及谁在关注你时,事情才会“有趣”...... :-)
我是否让这变得比现在更复杂? :-(
我尝试了什么:
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)
【问题讨论】:
【参考方案1】:这不是一个特别复杂的案例。不过,我个人觉得你的用词有点令人困惑。 “viewedProfiles”和“visitedProfiles”对我来说听起来不像彼此的倒数。 “viewedProfiles”和“viewers”怎么样?
不过,无论选择什么词,都按照您所描述的那样设置关系。如果将 B 添加到“A 的查看者”中,那么 B 的“viewedProfiles”也会更新。
了解最近查看/访问的副作用需要一些额外的工作。您可以为观众/被观看者使用有序关系;这感觉像是最简单的事情。或者,您可以添加一个新实体,即访问,它会记录查看者、被查看者以及访问的时间/日期。但第二种方法确实更复杂。
【讨论】:
谢谢,命名约定也让我更容易理解。 是的,第二种情况是我试图实现的——即,跟踪有关关注的某些元数据,但我删除了所有代码只是为了让基本的东西正常工作。此外,我的代码中有一个错误,它没有将更改推送到 CD 上下文。稍后我将添加其他元数据功能。我将把它标记为已接受。再次感谢您修复命名约定并验证我的假设,因为我试图过多地与 Core Data 作斗争:-)【参考方案2】:您对关系的定义看起来不错。您可以拨打任一电话
[a addVisitedProfilesObject:b];
或
[b addViewedProfilesObject:a];
将b
添加到a.visitedProfiles
和 a
到b.viewedProfiles
。
【讨论】:
谢谢,我就是这样设置的。我自己的代码中有一个错误,阻止了保存。您对 [link]***.com/questions/20447142/… 的回答也非常有帮助。以上是关于特定用例的自引用核心数据模型的主要内容,如果未能解决你的问题,请参考以下文章
用Use case获取需求的方法是否有什么缺陷,还有什么地方需要改进