我正在编写一个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?
答案 0 :(得分:1)
您正在创建XMLParser对象并设置其托管对象上下文。这很好。
但是,然后你发布它。如果您打算使用该对象,则不应立即将其释放。
<强>更新强>
您可以将托管对象上下文传递到applicationDidFinishLaunching:
中的视图控制器中。您也可以从应用程序委托或管理核心数据堆栈的其他单例中获取它。
您可以从app delegate获取托管对象上下文,如下所示:
[UIApplication sharedApplication].delegate.managedObjectContext