-4

我面临与这里相同的问题

如何实现一个商店中的实体与另一个实体之间的关系?

请指导我完成这个。

4

2 回答 2

2

在某些情况下,跨存储拆分对象确实是可能的并且完全有意义

假设 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];
}

这还不是获取的属性,但很容易

查看与 Fetched Properties 的 Cross-Store 弱关系?对于一个复杂的方式^^

于 2012-12-09T12:17:48.453 回答
-1

简短的回答是你不能。您不能在跨持久存储的托管对象之间建立关系。

但是,您可以在模型中实现您跨商店维护的键或标识符,并使用它在不同商店中查找“相关”对象。

如果您在一个存储中具有用户记录,而在另一个存储中有应用程序数据,则应用程序记录可能具有“belongsTo”属性,其值是与用户存储中的用户记录相对应的用户 ID。

Apple 的文档对此非常具体:

来自核心数据编程指南: “核心数据不允许您创建跨存储的关系。如果您需要创建从一个存储中的对象到另一个存储中的对象的关系,您应该考虑使用获取的属性。”

同样,来自核心数据编程指南: “您必须注意不要创建从一个持久存储中的实例到另一个持久存储中的实例的关系,因为核心数据不支持这一点。如果您需要在实体之间创建关系不同的商店,您通常使用获取的属性(请参阅“获取的属性”)。”

这正是我上面所说的。如果您以这种方式实现获取的属性,则由您来维护图形的完整性。同一个文档将引导您创建和使用获取的属性。也许您可以更具体地了解您需要回答的内容。

于 2012-12-08T22:05:18.993 回答