我正在将Core Data集成到一个不是使用Core Data模板创建的应用程序中。我遇到了这方面的问题,可能有一个非常简单的答案。但是,由于大多数关于这个主题的教程都是针对使用模板的,所以我很难过。
我已经按照建议创建了一个选中Core Data的简单应用,并将生成的代码复制到我现有的应用中。但是,我无法弄清楚如何访问AppDelegate之外的NSManagedObjectContext。我有几个视图控制器,我需要访问托管对象上下文。
我复制到应用程序中的生成代码放在AppDelegate中,以及.pch文件中对CoreData的引用。我错过了什么吗?如何访问托管对象上下文?
谢谢! V
答案 0 :(得分:5)
我遇到了几周前你面临的同样问题。根据我的研究,我发现通过让AppDelegate将ManagedObjectContext传递给您想要访问它的类来避免僵化是一种最佳实践。你可以这样做:
在.h文件中为要访问managedObjectContext的类创建一个属性:
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
然后合成:
@synthesize managedObjectContext;
将managedObjectContext分配给AppDelegate中didFinishLaunchingWithOptions:
方法中的实例变量:
MyClass.managedObjectContext = self.managedObjectContext;
可能有更好的方法可以实现这一目标,但它对我来说效果很好。此外,我的类/视图控制器不需要了解任何有关AppDelegate的信息。
修改:根据以下评论删除了setter方法。
答案 1 :(得分:3)
您可以通过多种方式在应用中共享对象上下文。请注意,您需要确保不在不同的线程上使用上下文;如果你想在后台和前台线程中使用Core Data,你将不得不添加一些复杂功能。
您使用的选项取决于您:
[[UIApplication sharedApplication] delegate]
获得app委托,并直接从app delegate获取CD对象(我不喜欢这种方法,但它可能涉及最少的代码更改)。