我有一组CoreData对象,它们与另一个对象类型有很多关系。
在其中一些对象上,我需要搜索相关对象以找到特定对象。所以我遍历他们寻找一个正常的匹配。但仔细观察后,我可以看到CoreData在循环中的每个项目时关闭每个故障,显然这不是好事 - 数百个故障单独发射。
我可以触发CoreData作为一个组来解除该关系中的所有错误吗?
答案 0 :(得分:1)
您可以使用反向关系“手动”获取相关对象,使用谓词来限制结果。例如,如果Department
与Employee
有多对多的关系,并且您想要获取Employees
的所有currentDepartment
,则抓取可能如下所示:
NSFetchRequest *employeeFetch = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
employeeFetch.predicate = [NSPredicate predicateWithFormat:@"department == %@",currentDepartment"];
这将一次性获取所需的Employee
个对象(*)。然后,您可以使用fetch返回的数组或currentDepartment.employees
关系给出的集来搜索。根据您执行的搜索的复杂性,您甚至可以将其表达为谓词中的另一个子句,并且根本不需要循环。
(*)从技术上讲,fetch返回的对象仍然是错误的(除非你将returnsObjectsAsFaults
设置为false),但这些错误的数据已经从存储中提取到缓存中,因此现在故障的开销很小。