0

我对这项技术并不陌生,但有一件事让我很烦。这是关于核心数据的。假设我有这样的数据库模型:

人 <-> 房子 <-> 房子详细信息

<-> 表示双向关系,Person 有很多房子,每个房子都有它的详细信息(无论如何,例如)。

现在在核心数据中,当我接触到特定的人时,我会得到这个人以及所有关系(在客观方法参考中)到“房屋细节”。

现在想象一下 db 模型更复杂,XCode 强制双向关系(仅通过警告,但仍然如此)。

我的问题是假设我是否根据 XCode 正确(双向)拥有所有关系,是否有任何方法可以获取查询(来自上面的示例),我想在其中获取特定的 Person,但没有对房屋和房屋详细信息的引用。

我问这个问题的原因是因为据我所知这是不可能的,或者不是?另一个原因,主要原因是,当我们拥有具有双向关系的复杂数据库模型时,当我们只想接收没有任何人的数据时,需要一些时间来获取所有这些数据(我们想要的但有所有引用)与数据库模型的其他关系(参考)如此。基本上,这个想法是在我们仅要求 Person 数据时从结果中修剪所有关系(根据示例)。

注意:这是我关于堆栈溢出的第一篇文章,所以不要活吃我:)。但是,如果这不可能实现我的要求,老实说,这是一个很大的痛苦,不能从开发人员的角度按照您想要的方式管理数据。

如果我对这篇文章不清楚,请告诉我,我会解释这一点。

4

3 回答 3

0

当您获得实体的特定实例时,您不必担心 Core Data 将获取的确切内容。Core Data 将为您管理内存问题。即使是获取实体的单个属性也可能是,"faults"即核心数据会在需要时自动检索这些详细信息。NSLog您可以使用语句检查这一点。除非需要,否则您的托管对象的许多详细信息将不可用。

因此,如果您有一个实体Person并获取一个person包含 100 个房屋的实例,每个实例包含 50 个房屋详细信息,您将不会被所有这些数据堵塞您的记忆。

实际上,这就是 Core Data 的美妙之处。

于 2012-05-31T21:11:01.813 回答
0

默认情况下,核心数据会延迟加载关系,因此当您获取人员对象时,只有在您开始引用它们时才会获取您的关系。

于 2012-05-31T21:13:29.817 回答
0

坏消息是,当您有双向关系时,这种关系是从两端维持的,因此在您的情况下,您可以将一个人添加到一个房子或一个房子到一个人,并且任何一方都会在他们的关系集中(假设多对多关系)。这就是 Core Data 的工作方式。

好消息是,由于 CoreData 懒惰地获取信息的方式,这真的无关紧要。因此,如果您希望在不获取所有相关房屋的情况下找到一个人,这就是 CoreData 所做的。直到您真正希望在关系结束时加载对象,它们作为故障存在,也就是说最小的骨架引用。

NSLog 您获取的 Person 对象之一,如果它的相关房屋以前没有被获取,它们将作为最小引用打印出来。

于 2012-05-31T21:16:45.277 回答