CoreData:添加时的两级 fetchRequest

Posted

技术标签:

【中文标题】CoreData:添加时的两级 fetchRequest【英文标题】:CoreData: two level fetchRequest on addition 【发布时间】:2011-05-05 14:50:09 【问题描述】:

我有一个存储电影和演员的核心数据。 我通过json获取电影列表。每部电影都有演员(演员、角色)

所以我有 Movie、Actor、ActorRole 实体。 当我收到电影列表时(每部电影都有一个唯一的电影 ID): - 获取当前在我的数据库中的所有电影 - 我创建了一个现有MoviesID 的 NSSet - 我创建了一个 newMoviesID 的 NSSet - 我做了一个减法设置来获得所有真正的新电影 - 我循环遍历这些新项目以将它们添加到 CoreData

这非常快,因为我只执行一个获取请求。 现在当我想将演员添加到数据库时它变得非常慢 添加新电影时我现在做什么: - 获取演员 ID - 为那个 Actor ID 创建 FetchReqyest - 执行 FetchRequest - 如果没有找到我添加一个新的演员,否则在 CoreData 中获取一个 - 我创建了创建电影和演员之间关系的 ActorRole

我认为这非常慢,因为我为每部电影做一次 Fetch 所以我正在寻找更好的方法来完成它。

有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用IN 运算符一次性获取所有现有的Actor 对象,以获取数组中具有actor_ID 值的所有Actor 对象。像这样:

NSPredicate *P=[NSPredicate predicateWithFormat:@"actor_ID IN %@", arrayOfIdValues];

这将加快您的Actor 获取速度,这似乎是您的瓶颈。

【讨论】:

以上是关于CoreData:添加时的两级 fetchRequest的主要内容,如果未能解决你的问题,请参考以下文章

基于内存和 Redis 的两级 Java 缓存框架

没有“一致方法解析”错误的两级抽象类层次结构

Wordpress优化的两级导航

Mybatis的两级缓存初解

青蛙跳台阶算法

Mybatis的两级缓存初解