【问题标题】:How do I give my parsing code access to my ManagedObjectContext?如何让我的解析代码访问我的 ManagedObjectContext?
【发布时间】:2011-01-19 11:27:53
【问题描述】:

我正在编写一个 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'' 

在我的应用委托中,我有以下与我的 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?

【问题讨论】:

    标签: iphone cocoa-touch core-data


    【解决方案1】:

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

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

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

    您可以像这样从应用委托中获取托管对象上下文:

    [UIApplication sharedApplication].delegate.managedObjectContext
    

    【讨论】:

    • @gerry3 我明白你的意思,我也觉得这很奇怪,但苹果教程也是这样做的,请看这里 (developer.apple.com/IPhone/library/documentation/DataManagement/…)
    • 教程不是这么说的。在您向其发送解析消息之前,您的解析器不会解析。实际上,您创建了一个解析器,然后在没有任何操作的情况下释放它。
    • 好的,我认为这里有一个单独的问题。现在我退后一步,我意识到我在 applicationDidFinishLaunching 中实例化的解析器,以及我设置的 managedObjectContext 与稍后按下 ViewController C 上的按钮时调用的实例不同. 因为,在按下这个按钮时,我实例化了一个新对象。我会更新问题
    • @gerry3 好的,但是这种方法在这里不被认为是不正确的吗?(stackoverflow.com/questions/1267520/…)
    • 据我所知它工作正常,但我首先列出了首选的解决方案(将上下文传递给视图控制器)。
    猜你喜欢
    • 1970-01-01
    • 2021-04-21
    • 2011-03-03
    • 2010-10-25
    • 2023-04-02
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多