核心数据迫使许多错误被解雇?

时间:2016-03-03 03:19:30

标签: ios core-data

我有一组CoreData对象,它们与另一个对象类型有很多关系。

在其中一些对象上,我需要搜索相关对象以找到特定对象。所以我遍历他们寻找一个正常的匹配。但仔细观察后,我可以看到CoreData在循环中的每个项目时关闭每个故障,显然这不是好事 - 数百个故障单独发射。

我可以触发CoreData作为一个组来解除该关系中的所有错误吗?

  • 我不想只是首先关注这种关系,因为我正在处理大量的对象,对于几乎所有这些对象,我都不需要深入了解相关对象。

1 个答案:

答案 0 :(得分:1)

您可以使用反向关系“手动”获取相关对象,使用谓词来限制结果。例如,如果DepartmentEmployee有多对多的关系,并且您想要获取Employees的所有currentDepartment,则抓取可能如下所示:

NSFetchRequest *employeeFetch = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
employeeFetch.predicate = [NSPredicate predicateWithFormat:@"department == %@",currentDepartment"];

这将一次性获取所需的Employee个对象(*)。然后,您可以使用fetch返回的数组或currentDepartment.employees关系给出的集来搜索。根据您执行的搜索的复杂性,您甚至可以将其表达为谓词中的另一个子句,并且根本不需要循环。

(*)从技术上讲,fetch返回的对象仍然是错误的(除非你将returnsObjectsAsFaults设置为false),但这些错误的数据已经从存储中提取到缓存中,因此现在故障的开销很小。