核心数据/iPhone SDK问题?

核心数据/iPhone SDK问题?,iphone,core-data,Iphone,Core Data,我最近使用核心数据创建了一个项目。我检查了xcode询问您是否要使用核心数据的位置,我在我的应用程序代理中生成了核心数据代码。经过几个小时的研究,我已经让它开始工作了。以下是我为使其发挥作用所做的工作: 在应用程序委托中创建managedObjectContext的实例 将该实例传递给将执行核心数据调用的对象,例如 managedObjectContext=[self-managedObjectContext]; //上述代码初始化MOC上生成的所有其他变量 DBLayer DBLayer=[[

我最近使用核心数据创建了一个项目。我检查了xcode询问您是否要使用核心数据的位置,我在我的应用程序代理中生成了核心数据代码。经过几个小时的研究,我已经让它开始工作了。以下是我为使其发挥作用所做的工作:

在应用程序委托中创建managedObjectContext的实例 将该实例传递给将执行核心数据调用的对象,例如 managedObjectContext=[self-managedObjectContext]; //上述代码初始化MOC上生成的所有其他变量

DBLayer DBLayer=[[DBLayer alloc]init]; dblayer.moc=managedObjectContext

你可能会认为你可以将所有生成的代码从app委托复制到一个新的对象,这样做会很好,但对我来说不是

所以,基本上我的问题是,你必须在应用程序委托中创建managedObjectContext并将其传递给任何需要它的人,还是有更简单的方法

我之所以问这个问题,是因为有些对象需要进行数据库调用,而我必须从应用程序委托将managedObjectContext的实例传递给它们


多亏了我项目中的所有回复,我的大部分CoreData堆栈都是以CoreData模板为例重新键入的。应用程序委托中的代码基本上实例化了核心数据堆栈,准备好了存储,所有这些有趣的东西

大多数情况下,您将要处理的主要对象是托管对象上下文。在大多数情况下,传递同一个对象是完全正确的,但是有时您需要另一个对象,并且必须合并它们,但这种情况很少。我所做的是将应用程序委托的MOC传递给我的根视图控制器,然后再传递给我的根视图控制器将其复制到任何其他需要它的视图控制器


因此,在应用程序委托中创建堆栈,然后根据需要将托管对象上下文传递给视图控制器。另一种方法是在需要时直接从应用程序委托访问它,就像单例一样。这样,你就不必通过整个导航堆栈传递它,只需在需要时检索它。这不是我所做的,但它确实是访问堆栈的有效方法。

答案严格取决于您的应用程序需要。例如,您的应用程序可能需要由多个不同线程处理的多个上下文,或者您可能只需要一个上下文。在后一种情况下,显而易见的/common管理这一点的方法就是将托管对象上下文传递给需要它的控制器