我有一个 CoreData 对象集合,它们与另一个对象类型具有一对多关系。
对于其中一些对象,我需要搜索相关对象以找到特定的对象。所以我循环遍历它们寻找一个效果很好的匹配。但经过仔细检查,我可以看到 CoreData 在到达循环中的每个项目时都会触发每个故障,显然这不好 - 数百个故障单独触发。
我可以触发 CoreData 以作为一个组来触发该关系中的所有故障吗?
- 我不想首先预取关系,因为我正在处理大量对象,并且对于几乎所有对象,我都不需要深入了解相关对象。<
最佳答案
您可以使用反向关系“手动”获取相关对象,使用谓词来限制结果。例如,如果 Department
与 Employee
存在一对多关系,并且您想要获取 currentDepartment
的所有 Employees
,提取可能如下所示:
NSFetchRequest *employeeFetch = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
employeeFetch.predicate = [NSPredicate predicateWithFormat:@"department == %@",currentDepartment"];
这将一次性获取所需的 Employee
对象 (*)。然后,您可以使用 fetch 返回的数组或 currentDepartment.employees
关系给出的集合来进行搜索。根据您正在执行的搜索的复杂性,您甚至可以将其表达为谓词中的另一个子句,而根本不需要循环。
(*) 从技术上讲,fetch 返回的对象仍然是故障(除非您将 returnsObjectsAsFaults
设置为 false),但是这些故障的数据已经从存储中提取到缓存中,因此触发故障现在的开销最小。
关于ios - Core data force to-many 故障全部触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35762563/