2

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

- (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:

在单协调的应用程序,你可以从应用程序委托直接将应用程序的上下文。

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

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

回答

3

所以也许在模态窗口的控制器类中有一个属性,并在调用modalWindow.show或其他任何你正在使用的设置之前设置modalWindow.moc=self.managedObjectContext。假设self是您的NSPersistentDocument子类。

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

文档MOC是将对象添加到Core Data存储库的权威接入点。

+0

对不起,回复/确认已晚。这钉了它!我认为这将是我忽略的一件非常简单的事情。 Newb失败。非常感谢! –

2

NSPersistentDocumentmanagedObjectContext方法来获得它的管理对象上下文:当您创建模式窗口传递给它的文件managedObjectContext使用

NSManagedObjectContext *context = [yourPersistentDocument managedObjectContext]; 
+0

感谢您的回复。 “yourPersistentDocument”部分究竟应该是什么?我认为这将是“文档”,引用我的Document.m类,这是我开始此项目时为我自动生成的NSPersistentDocument sublcass xcode。我得到一个编译器警告“选择器没有已知的类方法'managedObjectContext'”。 –

+0

@Joseph:奇怪,文档(http://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSPersistentDocument_Class/Reference/Reference.html#//apple_ref/occ/instm/NSPersistentDocument/managedObjectContext)表示NSPersistentDocument有一个managedObjectContext方法。 –

+0

所以文档会是正确的呢?我无法想象会发生什么。我应该简单地为这个班级创建一个MOC吗?还是它需要你只使用提供的那个? –

相关问题