1

我正在将 Core Data 集成到不是使用 Core Data 模板创建的应用程序中。我对此有疑问,可能有一个非常简单的答案。然而,由于大多数关于这个主题的教程都是针对使用模板的,所以我很难过。

我已按照建议创建一个检查了 Core Data 的简单应用程序并将生成的代码复制到我现有的应用程序中。但是,我不知道如何在 AppDelegate 之外访问 NSManagedObjectContext。我有几个视图控制器,我需要访问托管对象上下文。

我复制到应用程序中的生成代码被放入 AppDelegate,以及 .pch 文件中对 CoreData 的引用。我错过了什么吗?如何访问托管对象上下文?

谢谢!五

4

2 回答 2

5

几周前我遇到了同样的问题。根据我的研究,我发现通过让 AppDelegate 将 ManagedObjectContext 传递给要访问它的类来避免僵化是一种最佳实践。你可以这样做:

在 .h 文件中为要访问 managedObjectContext 的类创建一个属性:

@property (nonatomic, strong) NSManagedObjectContext  *managedObjectContext;

然后合成:

@synthesize managedObjectContext;

将 managedObjectContext 分配给didFinishLaunchingWithOptions:AppDelegate 中方法内的实例变量:

MyClass.managedObjectContext = self.managedObjectContext;

可能有更好的方法来实现这一点,但它对我来说效果很好。此外,我的类/视图控制器不需要了解有关 AppDelegate 的任何信息。

编辑:根据下面的评论删除了 setter 方法。

于 2013-08-10T17:44:22.023 回答
4

您可以通过多种方式在应用程序周围共享对象上下文。请注意,您需要确保不在不同线程上使用上下文;如果您想在后台和前台线程中使用 Core Data,您将不得不添加一些复杂性。

您使用哪个选项取决于您:

  • 我通常将核心数据对象(持久存储协调器、托管对象模型、前台和后台线程的上下文)移动到单例对象中,因此任何需要它的类都可以获取对象,而无需增加太多向上依赖。
  • 当您在应用程序委托中创建视图控制器时,您可以使用依赖注入将上下文传递到视图控制器,然后从这些视图控制器向下传递到需要它们的其他对象。
  • 您可以在应用程序委托的标头中公开核心数据获取器;然后在您的类中,您可以获取应用程序委托[[UIApplication sharedApplication] delegate]并直接从应用程序委托获取 CD 对象(我不喜欢这种方法,但它可能涉及最少的代码更改)。
于 2013-08-10T17:11:49.053 回答