似乎有很多关于将Core-data与基于文档的应用程序一起使用的信息。我有一个窗口控制器,在当前文档中运行模态窗口。用户将数据输入到文本字段中,该字段创建可变字符串数组,我想用它来创建模型对象(用于多对多关系),然后将它们保存到核心数据堆栈。这是我在模态窗口控制器中的方法。
- (IBAction)saveContext:(id)sender {
if ([tagsArray count] != 0) {
int objectcount;
for (objectcount = 0; objectcount < [tagsArray count]; objectcount ++){
Tag *singleTag = (Tag *) [NSEntityDescription insertNewObjectForEntityForName:@"Tag" inManagedObjectContext:self.managedObjectContext];
singleTag.tagname = [tagsArray objectAtIndex:objectcount];
singleTag.video = selectedFile;
NSLog(@"Tagnames %@",singleTag.tagname);
}
}
[NSApp stopModalWithCode:NSOKButton];
[self.window close];
}
好的,编译器对self.managedObjectContext不满意。可以理解的是,因为这个类没有上下文。我理解它的方式,使用基于文档的应用程序,您只想使用一个MOC。我不明白的是如何访问文档的MOC。 Apple的文档有点不清楚。
获取托管对象上下文
在OS X中:
在单协调器应用程序中,您可以直接从应用程序委托获取应用程序的上下文。
在基于文档的应用程序中,您可以直接从文档实例获取上下文。
我很尴尬地说我不知道这意味着什么。如何从文档实例中获取上下文?它是某种全局变量吗?任何帮助是极大的赞赏。
答案 0 :(得分:3)
创建模态窗口时,请传递要使用的文档managedObjectContext
。
因此,可能在模态窗口的控制器类中有一个属性,并在调用modalWindow.moc=self.managedObjectContext
或您使用的任何内容之前设置modalWindow.show
。假设self
是您的NSPersistentDocument子类。
你必须使用现有的MOC文件,不要创建一个新文件(你可以,但你不想去那里)。
文档MOC是将对象添加到Core Data存储的最终访问点。
答案 1 :(得分:2)
NSPersistentDocument
有一个managedObjectContext
方法来获取其托管对象上下文:
NSManagedObjectContext *context = [yourPersistentDocument managedObjectContext];