CoreData 跨模型访问对象

Posted

技术标签:

【中文标题】CoreData 跨模型访问对象【英文标题】:CoreData accessing objects across models 【发布时间】:2012-05-17 14:25:18 【问题描述】:

目前,我有两个 Core Data 模型,模型 A 和模型 B。

模型 A 需要模型 B 的值。(模型 A -> Entity1 -> valueFromModelB)

目前,我正在执行一个获取请求并在模型 A 的 NSObject 子类中进行过滤。但是,这似乎不是很有效,因为我需要经常更新这个值。

实现这一目标的最佳方法是什么?合并模型 A 和模型 B 中的实体并在两者之间建立关系会更好吗?理想情况下,我希望将它们分开,但如果合并更容易、更有效,那么我可能会走这条路。

【问题讨论】:

看看这里:cross-model-relationships-in-nsmanagedobjectmodel-from-merged-models。也许,将这些实体放在同一个模型中会更简单。希望对您有所帮助。 【参考方案1】:

根据您的问题,不确定您是否已经查看了预取选项以节省一些开销。根据Core Data Documentation,这里有一个用于预取的代码sn-p。

NSManagedObjectContext *context = /* get the context */;
NSEntityDescription *employeeEntity = [NSEntityDescription
entityForName:@"Employee" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:employeeEntity];
[request setRelationshipKeyPathsForPrefetching:
[NSArray arrayWithObject:@"department"]];

代码获取员工和部门信息,但我不确定如果 Department 处于不同的数据模型中,是否可以使用 NSPersistentStoreCoordinator 之类的东西来使用它。

Apple 的 Core Data 性能建议中的另一条注释是

每次往返持久存储(每次获取)都会产生开销,无论是在访问存储还是将返回的对象合并到持久堆栈中。如果您可以将多个请求组合成一个请求,该请求将返回您需要的所有对象,则应避免执行多个请求。您还可以尽量减少内存中的对象数量。

因此,如果理想情况下,如果您可以合并两个不同的 Core Data 模型,那将节省内存和获取数据的往返行程。

【讨论】:

【参考方案2】:

在同一个数据模型中创建不同的实体并创建实体之间的关系。那会更快更容易。 :)

【讨论】:

以上是关于CoreData 跨模型访问对象的主要内容,如果未能解决你的问题,请参考以下文章

如何跨视图传递 CoreData 对象

获取对象时无法访问一对多CoreData关系

尽管匹配 x-coredata id,但“CoreData 不支持持久的跨存储关系”

从自定义框架访问 Coredata 时应用程序崩溃

CoreData:通过关系访问对象

CoreData学习:Core Data Stack(Swift)