ios - Core data force to-many 故障全部触发?

标签 ios core-data

我有一个 CoreData 对象集合,它们与另一个对象类型具有一对多关系。

对于其中一些对象,我需要搜索相关对象以找到特定的对象。所以我循环遍历它们寻找一个效果很好的匹配。但经过仔细检查,我可以看到 CoreData 在到达循环中的每个项目时都会触发每个故障,显然这不好 - 数百个故障单独触发。

我可以触发 CoreData 以作为一个组来触发该关系中的所有故障吗?

  • 我不想首先预取关系,因为我正在处理大量对象,并且对于几乎所有对象,我都不需要深入了解相关对象。<

最佳答案

您可以使用反向关系“手动”获取相关对象,使用谓词来限制结果。例如,如果 DepartmentEmployee 存在一对多关系,并且您想要获取 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/

相关文章:

iphone - 为什么 Core Data 创建带有属性但没有伴随实例变量的 NSManagedObject?

ios - 核心数据错误 SIGABRT : keypath AttributeName not found in entity <NSSQLEntity EntityName id=2>

ios - 设计这个核心数据数据库的好方法是什么?

IOS-在应用程序中使用设置包?

ios - Xib 中的 SubViews MainView 为什么不显示在 iOS 中?

iphone - 如何阻止 UIScrollView 阻塞 GLKViewController 的 OpenGL ES 2.0 动画内容?

cocoa - NSUndoManager、核心数据和选择性撤消/重做

c# - 如何退出由 URL SCHEME 打开的统一应用程序并返回主应用程序?

ios - 在 iPhone 中以编程方式在沙箱外执行应用程序

ios - CoreData 临时关系示例