0

在核心数据模型中,有三个 Entity AB并且Cwhere可以与和/或A有关系。BC

由于某些原因B,并且C是在 s 上下文的子上下文中创建的(它们都共享相同的子上下文)A。因此,有一个父上下文(由 使用A)具有一个子上下文(由Band使用C)。

现在我需要

  1. 获取所有As 和
  2. 获取所有Bs(或Cs)。

我正在使用MagicalRecord与 CoreData进行交互,因此(1)很容易实现:

NSArray *all_As = [A findAll];

为了实现 (2),我现在可以使用 that I knowA的上下文:

NSManagedObjectContext *contextOfA = a.managedObjectContext

a的实例在哪里A。请注意,由于我的应用程序的设计方式,总有一个whicha可用于获取所有实例(换句话说:我不需要访问和没有)。如上所述,和(和)之间不一定存在关系。最后,甚至不必存在(并且可以没有)。BCBCAABCabca

但我确实知道,B并且C生活在A's child context 中。

所以基本上我只需要获取a.managedObjectContext的子上下文并对该子上下文执行获取请求:

NSArrray *all_Bs = [B findAllInContext: a.managedObjectContext.childContext]

但是我怎样才能访问a.managedObjectContext.childContext

4

2 回答 2

0

你不能简单地称呼它吗?

NSArray *all_Bs = [B findAll]; 

如果没有提及,MR 应该能够自己处理上下文。

如果这不起作用-您无法预测它是否会使用第三方框架-您为什么不简单地保留对子上下文的引用并在获取时使用它B

(为什么你会使用像 MR 这样的东西我无法理解。一旦你真正使用了 Core Data 的高级功能,它确实会让事情变得更加复杂。)

于 2013-02-22T13:07:19.307 回答
0

我找到了解决问题的方法:

在我的AppDelegate,我放了一个变量NSManagedObjectContext *tempObjectContext;。当我现在添加一个A对象时,我将它添加到 thistempObjectContext中。

正如我在原始帖子中所述,添加新对象或对象a时,这将永久存在。但是,不必与 . 因此,我也将这些和对象添加到其中。BCBCaBCtempObjectContext

现在,当我想保存一个BC对象时,我将它们保存到[NSManagedObjectContext defaultContext]并从中删除它们tempObjectContext

B *finalObject = [B createInContext:[NSManagedObjectContext defaultContext]];
NSDictionary *attributes = [[B entityDescription] attributesByName];
[finalObject setValuesForKeysWithDictionary:[self.temp dictionaryWithValuesForKeys:[attributes allKeys]]];

[[NSManagedObjectContext defaultContext] insertObject:finalObject];

[self.mainDelegate.tempObjectContext deleteObject:self.temp];

那么,我为什么要这么做?简单:当我将所有A,BC放入同一个对象中,然后创建一个aand 之后b,如果不保存就无法保存ba因为它们都在同一上下文中抵抗)。使用单独的上下文可以解决这个问题。

于 2013-02-23T11:29:22.450 回答