![](/img/trans.png)
[英]iPhone Core Data: NSFetchRequest with distinct properties and alphabet sections
[英]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.