我很难绕过Core Data的反向关系。例如,假设有两个实体:post
和comment
,其中
post
has_many comments
和comment
belongs_to post
使用xcode的可视化coredata编辑器,我将创建两个实体,然后通过以下方式链接它们:
post
关联到目标comment
并选择to many
comment
关联到目标post
而不选择to many
inverse
。inverse
时,幕后实际发生了什么。与ActiveRecord中的其他ORM
相同的是什么。答案 0 :(得分:0)
我经常听到的一句话是,CoreData主要是维护一个对象图,另一个是ORM。所以考虑到这一点,我会说在你设置inverse
关系的幕后,你注意到它是一个双向关系而不是两个单向关系。如果没有这个,您可以指定comment
有多个posts
但是如果您在评论中添加帖子,则可能无法将评论中的图表遍历到帖子然后返回
来自ActiveRecord可能没有多大意义,如果您将其视为保留密钥并注明关系 - 但CoreData可以有许多不同的数据存储格式,并且存储数据并不暗示反向关系。
如果你去#1并说它的倒数是#2,它应该具有相同的效果 - 但这很容易测试和看。
答案 1 :(得分:0)
设置反转意味着如果更改一个关系,则反向保持同步。例如,如果您向帖子添加评论,则会自动设置评论的“发布”关系。同样,如果您设置了Comment的post属性,那么该Comment将自动添加到Post的comments集合中。因此,以下两行代码是等效的:
newComment.post = aPost;
[aPost addCommentsObject:newComment];
如果你没有指定逆,那么你必须包括两条线来创建关系。建议使用反转,因为它更容易维护对象图的完整性。实际上这在商店中的持久性取决于商店类型,但如果您使用的是sqlite商店,那么很容易看到内部数据,看看Core Data正在做什么。