我从哪里获得托管对象上下文?

时间:2010-11-10 01:25:29

标签: iphone core-data

在我的AppDelegate.m中,在application: didFinishLaunchingWithOptions:方法中,我添加了以下行:

NSManagedObjectContext *context = [self managedObjectContext];

但它说:AppDelegate可能无法响应managedObjectContext。我在网上看到了这个,我做错了什么?我将#import <CoreData/CoreData.h>放在我的App_Prefix.pch文件中(请参阅Adding Core Data to existing iPhone project),但这没有帮助。

目标是设置myViewController.context = context,然后使用该上下文在视图控制器中获取一些数据。

编辑:请参阅我对O. Begemann答案的评论。

5 个答案:

答案 0 :(得分:11)

创建一个空的示例应用,并确保选中Core Data复选框。然后查看已在应用程序委托中生成的Core Data的样板代码。您需要在应用中使用相应的代码片段。

答案 1 :(得分:1)

您正在查看的教程可能使用了包含Core Data的iPhone项目模板。创建新项目时,大多数模板都有一个“使用核心数据进行存储”的复选框选项。选择该选项会在app委托中创建三个方法,以检索managedObjectContext,managedObjectModel和persistentStoreCoordinator。您可以使用[self managedObjectContext]等访问这些方法,就像您提到的教程一样。

答案 2 :(得分:1)

如果您决定将核心数据添加到现有项目并且没有勾选教程中提到的那个框,您将需要将属性添加到appdelegate头文件以及前缀中的这个重要部分.PCH

#import <Availability.h>

#ifndef __IPHONE_3_0
#warning "This project uses features only available in iOS SDK 3.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
#endif

答案 3 :(得分:0)

您的AppDelegate.h中是否有一个带有签名-(NSManagedObjectContext *) managedObjectContext;@property(...) NSManagedObjectContext *managedObjectContext;的方法?

答案 4 :(得分:0)

非常感谢你的建议。创建此样板应用程序后,我意识到如果选择CoreData选项,XCode会在app委托中生成一些额外的代码。我无法理解为什么Apple的开发指南有相对较长的多步骤来初始化核心数据堆栈,而且大多数示例只是引用这个(默认情况下不存在!)属性。事实证明,所有这些示例都假定应用程序是以某种方式创建的。