繁体   English   中英

iPhone核心数据NSFetchRequest

[英]iPhone Core Data NSFetchRequest

我对这项技术并不陌生,但有一件事正在困扰我。 关于核心数据。 假设我有这样的数据库模型:

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

<->表示双向关系,并且“人”有很多房屋,每座房屋都有其详细信息(例如,无论如何)。

现在在核心数据中,当我与特定人员联系时,我会将该人员以及所有关系(在客观方法参考中)归结为“房屋详细信息”。

现在,假设db模型更复杂,并且XCode强制建立双向关系(仅通过警告,但仍然)。

我的问题是假设我是否拥有根据XCode正确的所有关系(双向),是否有任何方法可以从我上面的示例中获取要查询的查询(从上面的示例中获取),而没有引用房屋和房屋的详细信息。

我之所以问这个问题,是因为据我所知这是不可能的还是不可能的? 另一个主要原因是,当我们具有仅包含双向关系的复杂数据库模型时,如果我们只想接收不包含任何数据的Person数据,则需要花费一些时间来获取所有这些数据(我们想要的,但具有所有引用)。与数据库模型的其他关系(引用)。 基本上,我们的想法是在仅要求提供Person数据时根据结果修剪所有关系(根据示例)。

注意:这是我关于堆栈溢出的第一篇文章,所以不要活着吃我:)。 但是,如果我所要的东西不可能的话,说实话,这是一个很大的痛苦,那就是无法按照开发人员的观点来管理数据。

如果我对此信息不清楚,请告诉我,我将对此进行解释。

当您获得实体的特定实例时,您不必担心核心数据将获取什么。 核心数据将为您管理内存问题。 即使是所获取实体的单个属性也可能是"faults"即Core Data在需要自动获取这些详细信息时。 您可以使用NSLog语句进行检查。 直到需要时,管理对象的许多详细信息才可用。

因此,如果您有一个实体Person并获取一个拥有100个房屋且每个房屋拥有50个房屋详细信息的实例person ,则不会用所有这些数据阻塞您的内存。

实际上,这就是核心数据的美。

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

坏消息是,当您具有双向关系时,两端都会保持这种关系,因此在您的情况下,您可以将一个人添加到房屋中,也可以将房屋添加到一个人中,并且任何一方都将在其关系集中设置该关系(假设多对多关系)。 这就是核心数据的工作方式。

好消息是,由于CoreData延迟获取信息的方式,这的确没有关系。 因此,如果您希望在不获取所有相关房屋的情况下找到一个人,那么CoreData就是这样做的。 直到您真正希望在关系结束时加载对象为止,它们以“故障”的形式存在,也就是说,骨架引用最少。

NSLog是您获取的Person对象之一,如果以前未获取过与之相关的房屋,它们将被打印为最小引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM