2

似乎有一些关于将核心数据与基于文档的应用程序一起使用的信息。我有一个在当前文档中运行模式窗口的窗口控制器。用户将数据输入到一个文本字段中,该字段创建一个可变的字符串数组,我想用它来创建模型对象(用于多对多关系),然后将它们保存到核心数据堆栈中。这是我在模态窗口的控制器中使用的方法。

 - (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。苹果的文档有点不清楚。

获取托管对象上下文

在 OS X 中:

在单协调器应用程序中,您可以直接从应用程序委托中获取应用程序的上下文。

在基于文档的应用程序中,您可以直接从文档实例中获取上下文。

我很尴尬地说我不知道​​这意味着什么。如何从文档实例中获取上下文?它是某种全局变量吗?任何帮助是极大的赞赏。

4

2 回答 2

3

当您创建模态窗口时,将managedObjectContext要使用的文档传递给它。

因此,可能在模态窗口的控制器类中有一个属性,并modalWindow.moc=self.managedObjectContext在调用modalWindow.show或您使用的任何内容之前设置它。假设self是您的 NSPersistentDocument 子类。

你必须使用现有的 MOC 文件,不要创建一个新的(你可以但你不想去那里)。

文档 MOC 是您将对象添加到核心数据存储的最终访问点。

于 2013-10-08T01:46:53.820 回答
2

NSPersistentDocument有一个managedObjectContext方法来获取它的托管对象上下文:

NSManagedObjectContext *context = [yourPersistentDocument managedObjectContext];
于 2013-08-17T19:10:14.893 回答