首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问ManagedObjectContext

访问ManagedObjectContext
EN

Stack Overflow用户
提问于 2013-08-10 16:56:48
回答 2查看 3.8K关注 0票数 1

我正在将Core数据集成到一个没有使用Core数据模板创建的应用程序中。我对此有异议,可能有一个非常简单的答案。但是,由于大多数关于这个主题的教程都是针对使用模板的,所以我感到很困惑。

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

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

谢谢!V

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-10 17:11:49

有几种方法,你可以分享你的对象上下文围绕你的应用程序。请注意,您需要确保不对不同的线程使用上下文;如果要在后台和前台线程中使用Core数据,则必须添加一些复杂的内容。

您使用的选项取决于您:

  • 我通常会将Core数据对象(持久存储协调器、托管对象模型、前台和后台线程的上下文)移动到单个对象中,这样任何需要它的类都可以获得对象,而不会以向上依赖的方式添加太多内容。
  • 在应用程序委托中创建视图控制器时,可以使用依赖注入将上下文传递到视图控制器,并从这些视图控制器向下传递到其他需要它们的对象。
  • 您可以在应用程序代表的头中公开核心数据获取器;然后在类中可以使用[[UIApplication sharedApplication] delegate]获取应用程序委托,并直接从应用程序委托获取CD对象(我不喜欢这种方法,但它可能涉及最少的代码更改)。
票数 4
EN

Stack Overflow用户

发布于 2013-08-10 17:44:22

几周前我遇到了你面临的同样的问题。根据我的研究,我发现最好的做法是避免僵化,让您的AppDelegate将ManagedObjectContext传递给您想要访问的类。您可以这样做:

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

代码语言:javascript
复制
@property (nonatomic, strong) NSManagedObjectContext  *managedObjectContext;

然后合成:

代码语言:javascript
复制
@synthesize managedObjectContext;

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

代码语言:javascript
复制
MyClass.managedObjectContext = self.managedObjectContext;

也许有更好的方法来实现这一目标,但对我来说效果很好。而且,我的类/视图控制器不需要知道任何关于AppDelegate的信息。

编辑:根据下面的注释删除了setter方法。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18164264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档