原来的问题已经回答了。更新解决了评论中提出的相关问题。
原帖:
我正在使用 Apple 的CoreDataBooks中使用的 MOC 保存方法。但是,我似乎使用了两层 MOC 合并(三个 MOC,其中第三层与第二层合并,然后第二层与第一层合并)。
首先,我有一个列出学校课程的表格视图(ClassList)。选择一个类会推送一个 2 行表视图 (AddClass)。在 AddClass 中,第一行允许用户编辑类标题。选择第二行会推送一个 tableview (ClassRoster),它显示该班级的学生名单。最后,选择一个学生会推送另一个 2 行表格视图 (AddStudent),用户可以在其中编辑学生姓名和用户名。
我可以通过使用双重 MOC 合并方法(CoreDataBooks 使用的 managedObjectContext 和addingManagedObjectContext)成功地添加和保存类。我将在我的第一个视图中将“基本 MOC”称为“MOC1”并将“暂存器”MOC 称为“MOC2”。
MOC2 临时存储对类对象所做的更改。然后可以保存或取消这些更改,将 a 发送-didFinishWithSave:(BOOL)
给委托人。如果我保存,在 MOC2 中所做的更改将与 MOC1 合并。该合并运行良好。
处理对学生对象所做的更改是我出错的地方。我想我可以使用 MOC3 作为暂存器来更改将与 MOC2 合并的学生对象(当我保存一个学生对象时)。当我保存类对象时,MOC2 可以反过来与 MOC1 一起保存。
但是我在保存 MOC3 并将学生对象添加到类对象时遇到了错误,因为它们位于不同的上下文中。我可以发布代码,但首先我想问一个更大的问题:我是不是走错了路?
更新:
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];
我遇到了一个错误,但我不确定它是否与此代码有关。我将调试并发布我发现的内容。