首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与核心数据建立关系

与核心数据建立关系
EN

Stack Overflow用户
提问于 2009-09-12 09:10:46
回答 2查看 1.2K关注 0票数 0

我有两个实体通过一对多的关系连接起来,比方说CategoryEntityItemEntity。这种关系对于CategoryEntity是可选的(可以有没有项的类别),但对于每个ItemEntity都是必需的。在应用程序加载时,商店中已经存在这些类别,我希望导入ItemEntities并将它们连接到适当的CategoryEntity。

显然,为每个FetchRequest执行一个ItemEntity来查找匹配类别并不是一个好的解决方案,因为每次大约有4000到6000项。

我还能做些更有效率的事吗?

EN

回答 2

Stack Overflow用户

发布于 2009-09-12 11:29:52

如果您已经正确地设置了您的核心数据模型,那么您有一个从类别实体到项目实体的一对多的关系,以及从一个项目到一个类别的反比关系。另外,对于to-多关系有“级联”删除规则,对于to-one关系有"nullify“删除规则。

假设是这样,每次插入Item对象时,设置其类别关系都会自动将项插入相应的类别。删除项目会自动将其从相应的类别中删除。

在类别方面,删除类别会自动移除所有对应的项目物件。

因此,当您获取项时,您已经为每个项目对象获取了相应的分类对象。你不需要做任何其他的事。注意,默认情况下,在获取过程中实际上并不是检索类别对象:而是在第一次尝试访问对象时触发一个错误,并在第一次检索对象时检索该对象。这提供了更好的性能,如果您不打算立即使用存储在项目对象中的目录对象。如果计划几乎每次获取项时都使用类别对象,则必须使用NSFetchRequest方法

代码语言:javascript
运行
复制
- (void)setReturnsObjectsAsFaults:(BOOL)yesNo
- (void)setRelationshipKeyPathsForPrefetching:(NSArray *)keys

要告诉核心数据,您现在需要错误,并要求预取类别关系。

票数 2
EN

Stack Overflow用户

发布于 2011-10-02 13:52:38

当你说“导入”项目实体时,你是什么意思?这些是否在另一个核心数据存储中,在某个文件中以另一种格式定义,通过网络检索?

一种方法是一次获取所有类别,并将它们添加到充当缓存的NSDictionary中,并通过一些允许您执行快速查找的标识值进行键控。对于导入期间实例化的每个项目实体(无论这意味着什么),检索其类别ID,然后从缓存中检索类别MO。设置关系,然后保存。更好的是,批量处理一些插入并每10,100或1000保存一次,以减少IO开销。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1414701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档