Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在NSPersistentDocument中从何处获取托管对象上下文?_Cocoa_Core Data_Nsmanagedobjectcontext_Nspersistentdocument - Fatal编程技术网

Cocoa 在NSPersistentDocument中从何处获取托管对象上下文?

Cocoa 在NSPersistentDocument中从何处获取托管对象上下文?,cocoa,core-data,nsmanagedobjectcontext,nspersistentdocument,Cocoa,Core Data,Nsmanagedobjectcontext,Nspersistentdocument,在基于文档的应用程序中使用核心数据的信息似乎不多。我有一个在当前文档中运行模式窗口的窗口控制器。用户将数据输入一个文本字段,该字段创建一个可变字符串数组,我希望使用该数组创建模型对象(用于多对多关系),然后将它们保存到核心数据堆栈。这是我在模态窗口的控制器中使用的方法 - (IBAction)saveContext:(id)sender { if ([tagsArray count] != 0) { int objectcount; for (objectcount = 0;

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

 - (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];
}
-(iAction)saveContext:(id)发送方{
如果([tagsArray计数]!=0){
int objectcount;
对于(objectcount=0;objectcount<[tagsArray计数];objectcount++){
Tag*singleTag=(Tag*)[NSEntityDescription insertNewObjectForEntityForName:@“Tag”inManagedObjectContext:self.managedObjectContext];
singleTag.tagname=[tagsArray objectAtIndex:objectcount];
singleTag.video=selectedFile;
NSLog(@“标记名%@”,singleTag.tagname);
}
}
[NSApp STOPMODALWITH CODE:NSOK按钮];
[自动关闭窗口];
}
好的,编译器对self.managedObjectContext不满意。可以理解,因为这个类没有上下文。按照我的理解,使用基于文档的应用程序,您只想使用一个MOC。我不明白的是如何访问文档的主运行中心。苹果的文档有点不清楚

获取托管对象上下文

在OS X中:

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

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


我不好意思说我不知道这是什么意思。如何从文档实例获取上下文?它是某种全局变量吗?非常感谢您的帮助。

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

NSManagedObjectContext *context = [yourPersistentDocument managedObjectContext];

创建模式窗口时,将要使用的文档
managedObjectContext
传递给它

因此,在调用
modalWindow.show
或您正在使用的任何东西之前,可以在controller类中为模态窗口设置一个属性,并设置
modalWindow.moc=self.managedObjectContext
。假设
self
是您的NSPersistentDocument子类

您必须使用现有MOC的文档,不要创建新文档(您可以,但您不想去那里)


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

谢谢您的回复。“yourPersistentDocument”部分到底应该包含什么?我假设它是“Document”,引用我的Document.m类,它是在我开始这个项目时自动为我生成的NSPersistentDocument子类cass xcode。我收到一条编译器警告“选择器‘managedObjectContext’没有已知的类方法”。@Joseph:奇怪,文档()说NSPersistentDocument有一个managedObjectContext方法。那么文档是正确的吗?我无法想象还会是什么。我应该仅仅为这个类创建一个MOC吗?还是只要求您使用提供的方法?@Joseph:您的文档(继承自NSPersistentDocument)应该响应该方法,并且您应该使用提供的上下文。但是我现在不在电脑旁,所以我现在不能自己测试。@JosephToronto:我已经在Xcode中创建了一个“基于文档的应用程序”,带有“使用核心数据”选项
NSManagedObjectContext*context=[self-managedObjectContext]
在Xcode生成的文档类中工作正常。很抱歉回复/确认延迟。这太棒了!我想这会是我忽略的一件非常简单的事情。新手失败了。非常感谢!