多层MOC合并...... CoreData老手,你怎么看?

时间:2010-08-10 21:22:08

标签: core-data nsmanagedobjectcontext

原始问题已得到解答。更新评论中提出的相关问题。

原帖:

我正在使用Apple的CoreDataBooks中使用的MOC保存方法。但是,我似乎使用了两层MOC合并(三个MOC,其中第三个与第二个合并,然后第二个与第一个合并)。

首先,我有一个列表学校课程的tableview(ClassList)。选择一个类会推送一个2行的tableview(AddClass)。在AddClass中,第一行允许用户编辑类标题。选择第二行将推送显示该类的学生名单的tableview(ClassRoster)。最后,选择学生将推送另一个2行tableview(AddStudent),用户可以在其中编辑学生姓名和用户名。

我可以使用双MOC合并方法(managedObjectContext和CoreDataBooks使用的managedManagedObjectContext)成功添加和保存类。我将在我的第一个视图“MOC1”中调用“基础MOC”,并将“暂存器”称为MOC“MOC2”。

MOC2临时存储对类对象所做的更改。然后可以保存或取消这些更改,向代理发送-didFinishWithSave:(BOOL)。如果我保存,MOC2中所做的更改将与MOC1合并。合并是完美的。

处理对学生对象所做的更改是我出错的地方。我以为我可以使用MOC3作为暂存器来更改学生对象,这些对象将与MOC2合并(当我保存学生对象时)。当我保存类对象时,MOC2又可以用MOC1保存。

但是我在保存MOC3并将学生对象添加到类对象时遇到了错误,因为它们位于不同的上下文中。我可以发布代码,但首先我想问一个更大的问题:我是否会以错误的方式解决这个问题?

UPDATE:

先生。 Zarra建议使用initWithEntity:insertIntoManagedObjectContext:并将MOC设置为nil,从而创建一个临时对象,以后可以设置并保存MOC。

根据他的建议,我试图加入以下代码:

    NSManagedObjectModel *managedObjectModel - [[managedObjectContext persistentStoreCoordinator] managedObjectModel];
    NSEntityDescription *entity = [[managedObjectModel entitiesByName] objectForKey:@"MyClass"];
    MyClass *newClass = [[MyClass alloc] initWithEntity:entity insertIntoManagedObjectContext:nil];

我遇到了错误,但我不确定它是否与此代码有关。我将调试并发布我发现的内容。

1 个答案:

答案 0 :(得分:1)

是。您不需要使用多个NSManagedObjectContext。那个例子非常糟糕。在您的情况下,您应该使用单个上下文,这将删除您的所有问题。

如果您想要一个临时实体,请使用零NSManagedObjectContext创建它。如果要保存,请致电-setManagedObjectContext:,然后保存NSManagedObjectContext

您实际上想要使用多个NSManagedObjectContext的唯一时间是在多线程情况下。