Long CoreData谓词将多个术语与属性+关系匹配

时间:2018-01-06 02:21:35

标签: core-data ios11 swift4 xcode9

我正在使用swift 4,Xcode 9,iOS 11

我将继续通过教程和Q& A帖子了解CoreData,但我似乎无法弄清楚如何回答这个问题。

我有一个CoreData实体,其中包含一个属性和12个与不同实体的关系,每个实体包含1-3个属性。这是因为主实体中的任何给定对象可以在每个相关实体中具有多个附加细节。

我希望用户能够搜索和匹配数据库中的几乎任何内容。我当前的尝试使用FetchRequest循环遍历主实体,并且在每个循环内匹配关系。这有效,但(正如预期的那样)有点慢。

我尝试使用这样的谓词:“name包含TERM OR ANY relation.name包含TERM ......” 但是这成长为一个长谓词,每次fetchrequest加载需要30多秒。比没有谓词慢得多。

如何更有效地搜索整个数据库?有没有更好的方法来编写谓词?有没有更好的方法来设计我的数据模型?

感谢您提供任何指导。

1 个答案:

答案 0 :(得分:0)

1个月后,解决方案是拆分fetchRequests并分别为每个谓词添加一个谓词。此外,这允许我选择特定的相关实体是否需要BEGINSWITH [cd]或CONTAINS [cd]。

回顾一下:

  • 一个长谓词滞后~30秒
  • 组合谓词不是更好
  • 向上拆分fetchRequests并为每个谓词添加一个小谓词,导致搜索所有12个关系的UI延迟为零。

非常感谢Jon Rose提出的建议。