Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 详细描述了岩心数据的逆关系_Ios_Core Data - Fatal编程技术网

Ios 详细描述了岩心数据的逆关系

Ios 详细描述了岩心数据的逆关系,ios,core-data,Ios,Core Data,我很难理解核心数据的反向关系。例如,假设有两个实体:post和comment,其中 这篇文章有很多评论和建议 评论属于帖子 使用xcode的visual coredata编辑器,我将创建这两个实体,然后通过以下方式链接它们: 将帖子连接到目标评论并选择多个 将评论连接到目标帖子,而不是选择多个 确保上面2的关系是1的倒数。 我的问题是: 选择“反转”时,幕后实际发生了什么。这在其他ORM中相当于什么,比如ActiveRecord。 如果我没有将2的倒数指定为1,而是转到1并说它的倒数是2,这会有

我很难理解核心数据的反向关系。例如,假设有两个实体:post和comment,其中

这篇文章有很多评论和建议 评论属于帖子 使用xcode的visual coredata编辑器,我将创建这两个实体,然后通过以下方式链接它们:

将帖子连接到目标评论并选择多个 将评论连接到目标帖子,而不是选择多个 确保上面2的关系是1的倒数。 我的问题是: 选择“反转”时,幕后实际发生了什么。这在其他ORM中相当于什么,比如ActiveRecord。 如果我没有将2的倒数指定为1,而是转到1并说它的倒数是2,这会有同样的效果吗?
我经常听到的一句话是,CoreData首先是维护对象图,其次是维护ORM。考虑到这一点,我想说,在幕后,当你设置一个反向关系时,你注意到这是一个双向关系,而不是双向关系。如果不这样做,您可能可以指定一条评论有许多帖子,但是如果您将帖子添加到一条评论中,您可能无法将图表从评论遍历到帖子,然后再返回

来自ActiveRecord,如果您将其视为将键保留在列中并记录关系,那么这可能没有多大意义,但是CoreData可以有许多不同的数据存储格式,并且存储数据并不意味着反向关系

如果你去1,说它的倒数是2,它应该有同样的效果-但是这很容易测试和看到

设置反向意味着,如果更改一个关系,则反向将保持同步。例如,如果向帖子中添加评论,则会自动设置该评论的帖子关系。类似地,如果设置了注释的post属性,则该注释将自动添加到post的comments集合中。因此,以下两行代码是等效的:

newComment.post = aPost;
[aPost addCommentsObject:newComment];
如果未指定反向,则必须包含两条线才能创建关系。建议使用反转,因为更容易保持对象图的完整性。这实际上是如何在存储中持久化的取决于存储类型,但是如果您使用的是sqlite存储,那么很容易窥视内部以了解核心数据在做什么

它们是等价的。
与两个不相关的单向关系相比,双向关系的功能如何不同?您的意思是说,如果不指定inverse,我就无法执行类似[post.comments objectAtIndex:0].post这样的操作吗?如果是这样的话,我想知道为什么会是这样,因为理论上[post.comments objectAtIndex:0]应该返回一个comment对象,从一个comment访问一篇post应该没有问题。在您的示例中,使用反向可以确保从一篇post到另一篇comment返回正确的post。你的假设是,如果你可以从一篇文章转到一篇评论,你可以从一篇评论回到同一篇文章,这正是相反的定义。有更多