CoreData 获取实体

Posted

技术标签:

【中文标题】CoreData 获取实体【英文标题】:CoreData Fetching Entities 【发布时间】:2011-12-15 14:26:33 【问题描述】:

我有一个非常基本的问题。 如果我有两个实体之间存在关系(可以说 entityOne 与 entityTwo 有一对多关系)。 当我获取 entityOne 时,它​​会自动获取其关系吗?还是我也必须获取它们并将它们分配给相应的实体?

我认为这实际上会更好地在聊天中提出,因为这是一个简单的问题,但我还没有所需的声誉。

由于问题太短,我无法发布我的问题,所以我会再问一个问题。

在同一个项目中,我有一个获取实体的 rootViewController。现在,如果我想添加一个事件,我必须使用 textFields 等将用户发送到另一个视图。我最终为每个视图控制器创建了一个数组“eventArray”,因为我找不到更有效的方法。 假设我在 rootViewController 中有一个 NSMutableArray *eventsArray,在 addEventViewController 中我还有一个 NSMutableArray *eventsArray,它在推送 addEventViewController (addEventViewController.eventsArray = self.eventsArray) 之前设置。 我如何更有效地做到这一点?我很确定这不是正确的做法。

【问题讨论】:

查看@paulbailey 对故障部分的回答。对于传递数组,我不同意保罗并建议你做对了。您并没有增加内存使用量,因为您只是将指针传递了很长时间。您这样做的方式使您的对象之间的耦合更加松散,这很好,并且可以进行适当的测试。如果您只是在应用程序委托(单例)中有一个数组,那么您实际上有一个全局变量,这将使测试变得更加困难,并会减少您的对象的任何潜在重用。 是的,我没有在 appDelegate 中使用变量,因为 Paul Hegarty 说为此使用 appDelegate 不是一个好主意。很高兴我做对了 所有优点,我将从我的回答中编辑那个愚蠢的东西。 【参考方案1】:

回答你的第一个问题:

这种情况由 Core Data 自动处理,这种机制称为“故障”。苹果有some helpful documentation on this。简单地说,相关对象没有被获取,但是当你尝试访问它们时,Core Data 会自动从持久存储中检索它们。

当然,在某些情况下,这种逐一获取相关对象(例如,可能在表格中显示有关相关对象的某些内容)会降低您的应用程序的速度。

在这种情况下,您可以使用NSFetchRequest 上的setRelationshipKeyPathsForPrefetching: 方法预先检索这些对象。这都是平衡内存使用和性能的问题。

Faulting 是 Core Data 中非常重要的一部分,我强烈建议您仔细阅读文档,以确保您对它的使用方式和时间有很好的了解。

【讨论】:

以上是关于CoreData 获取实体的主要内容,如果未能解决你的问题,请参考以下文章

如何使用CoreData获取相关实体的对象?

CoreData 获取实体

在 CoreData 中获取实体时,实体关系是不是也会加载到内存中?

从 CoreData 获取多个实体

如何从coredata中的实体获取过滤数据

如何在 coredata 中获取实体名称