如何让我的解析代码访问我的ManagedObjectContext?

时间:2010-02-22 01:13:27

标签: iphone cocoa-touch core-data

我正在编写一个iPhone应用程序,它获取XML文件,解析它,然后将解析的对象保存到Core Data。我已经将所有工作都保存到了将对象保存到Core Data的程度。我想这与我如何引用ManagedObjectContext有关,但我无法弄清楚我哪里出错了。我看过SO question here,但我仍然难过。我已经按照Core Data Tutorial for iPhone进行了操作,但似乎在将我学到的知识运用到我自己的项目中时遇到了问题。我的应用程序在结构上与教程中的示例不同。

我的应用程序是一个带有三个子视图的UITabBar,让我们称它们为A,B和C,以及一个单独的类文件,它只用于获取名为XMLParser的XML。只需按下ViewController“C”中的按钮即可调用此XML提取类。

当我解析XML时,我尝试将已解析的对象即时保存到Core Data。它在第一次尝试时失败并出现以下错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'+entityForName: could not locate an NSManagedObjectModel for entity name 'Branch'' 

在我的app委托中,我有以下与xmlparser类相关的代码:

位于AppDelegate.m文件的顶部

#import "XMLParser.h"

内部applicationDidFinishLaunching

NSManagedObjectContext *context = [self managedObjectContext];
XMLParser *xmlparser = [[XMLParser alloc] init];
xmlparser.managedObjectContext = context;
[xmlparser release];

现在不要将大量代码粘贴到问题中,如果有人能够看到我到目前为止所写的内容,那么请索取更多代码或更好的解释。

编辑:我已检查this SO question的已接受答案中的所有内容,并且我已完成所有这些

由于


修改

我现在意识到,因为我实际上在按下ViewController C中的按钮时实例化XMLParser对象,所以applicationDidFinishLaunching中设置的managedObjectContext不适用于新实例化的对象。那么,当我按下ViewController上的按钮后实例化它时,如何让XMLParser访问我的应用程序ManagedObjectContext?

1 个答案:

答案 0 :(得分:1)

您正在创建XMLParser对象并设置其托管对象上下文。这很好。

但是,然后你发布它。如果您打算使用该对象,则不应立即将其释放。

<强>更新
您可以将托管对象上下文传递到applicationDidFinishLaunching:中的视图控制器中。您也可以从应用程序委托或管理核心数据堆栈的其他单例中获取它。

您可以从app delegate获取托管对象上下文,如下所示:

[UIApplication sharedApplication].delegate.managedObjectContext