问题:AddingManagedObjectContext 的笨拙使用?
该应用程序是通用库样式 CoreData。RootTableView 具有书籍类别列表、小说、科幻等。添加书籍是通过 EditButton 在第二级 BookListTableView 上完成,然后是新出现的“+”按钮。第三级显示书籍详情表格视图。
当用户触摸第二级“BookList”视图上的“+”按钮时,他已经表明该书默认情况下应该具有刚刚在主 BookCategoryList 视图上选择的类别。新书将是主 MOC 中的未知对象,并在插入操作开始时放置在添加 MOC 中。我发现如果我将用户所需的类别(比如科幻)从 mainMOC 添加到 addMOC 中,保存时会出现错误:时间,因为据我了解,ManagedObject 不能存在于两个不同的 MOC 中。
因为我想为了方便用户而执行此类别添加,所以我进行了以下工作。我使用具有相同类别名称的新替代类别,并将其添加到新书的属性中:
@property (nonatomic, retain) NSSet* categories;
,从而允许在编辑模式下的 Books Details Table 视图显示替代类别对象的名称。然后当用户触摸保存按钮时,就在:
[self.addingManagedObjectContext save:&error]
使用objectID,我从新书中删除了替代类别,然后从addingManagedObjectContext 本身中删除了相同类别。
按照这个添加MOC保存通过:
NSNotificationCenter *dnc = [NSNotificationCenter defaultCenter]; [dnc addObserver:self 选择器:@selector(addControllerContextDidSave:) 名称:NSManagedObjectContextDidSaveNotification 对象:self.addingManagedObjectContext];
addMOC 中的新书(无类别)被合并到 mainMOC
然后我将mainMOC对应的category插入到新书里,然后保存mainMOC,完成saveAction。
这对我有用,但感觉很尴尬。有人可以解释我错在哪里以及我错过了什么吗?处理这个问题的正确和优雅的可可方法是什么?
谢谢,马克