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 跨模型访问对象的主要内容,如果未能解决你的问题,请参考以下文章