【发布时间】:2012-11-16 09:14:53
【问题描述】:
【问题讨论】:
标签: iphone objective-c ios core-data fetched-properties
【问题讨论】:
标签: iphone objective-c ios core-data fetched-properties
在某些情况下,跨存储拆分对象确实是可能的并且完全有意义
假设 obj A 在 Store #1 中,obj B 在 Store #2 中。
每个A有N个B
最简单的解决方案可能是 A ... 上的 TRANSIENT 属性,名为 'allMyBs'
然后在代码中实现获取:
- (NSArray*)allMyBs {
NSFetchRequest *r == ... //setup to fetch Entity B
[CoreDataHelper managedObjectContextForStore2] executeFetchRequest:r];
}
这不是获取的属性,但很容易
查看Cross-Store weak relationship with Fetched Properties?了解复杂的方法^^
【讨论】:
简短的回答是你不能。您不能在跨持久存储的托管对象之间建立关系。
但是,您可以在模型中实现您跨商店维护的键或标识符,并使用它在不同商店中查找“相关”对象。
如果您在一个商店中有用户记录,而在另一个商店中有应用程序数据,则应用程序记录可能有一个“belongsTo”属性,其值是与用户商店中的用户记录对应的用户 ID。
Apple 的文档对此非常具体:
From the Core Data Programming Guide: “Core Data 不允许您创建跨商店的关系。如果您需要创建从一个商店中的对象到另一个商店中的对象的关系,您应该考虑使用获取的属性。”
Again, from the Core Data Programming Guide: “您必须注意不要在一个持久存储中的实例与另一个持久存储中的实例之间创建关系,因为 Core Data 不支持这一点。如果您需要在不同存储中的实体之间创建关系,您通常使用获取的属性(请参阅“获取的属性”)。”
这正是我上面所说的。如果您以这种方式实现获取的属性,则由您来维护图形的完整性。同一个文档将引导您创建和使用获取的属性。也许您可以更具体地了解您需要回答的内容。
【讨论】: