在AppDelegate中设置managedObjectContext

时间:2016-05-24 10:12:52

标签: swift core-data

我正在尝试学习核心数据的基础知识,并开始使用单个视图应用程序,同时拥有主要详细信息应用程序的基本模板,核心数据可供参考。

我试图通过AppDelegate.swift在我的MasterViewController中设置我的managedObjectContext。

我到目前为止,主 - 详细信息模板使用的是我没有使用的拆分视图,那么如何只使用单视图应用程序进行类似的操作呢?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // How to reference MasterViewController???

    controller.managedObjectContext = self.managedObjectContext
    return true
}

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码行访问整个应用程序的托管对象上下文。

let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

所以你可以删除以下行。

controller.managedObjectContext = self.managedObjectContext

答案 1 :(得分:1)

我建议NSManagedObjectContext传递给Apple文档中建议的相应视图控制器。 这涉及以下步骤:

  • 准备您的核心数据堆栈;
  • 保留对核心数据堆栈中准备的NSManagedObjectContext的强引用;
  • 在您的(快速)视图控制器文件中包含NSManagedObjectContext公共属性;
  • 设置视图控制器中的公共属性来自堆栈中保存的引用。

来自Apple Documentation ...

  

获取托管对象上下文

     

在iOS中:

     

按照惯例,您从视图控制器获取上下文。你必须   但是,要适当地实施您的应用程序,请遵循此   图案。

     

实现与Core Data集成的视图控制器时,   您可以添加NSManagedObjectContext属性。

     

创建视图控制器时,您应该传递它应该的上下文   使用。您传递现有上下文,或(在您想要的情况下)   用于管理离散编辑集的新控制器)新的上下文   你为它创造的。这通常是责任   应用程序委托创建传递给第一个视图的上下文   显示的控制器。

     

视图控制器通常不应从a检索上下文   全局对象,例如应用程序委托 - 这使得   应用程序架构刚性视图控制器也不应该   创建一个供自己使用的上下文(除非它是嵌套的上下文)。这个   可能意味着使用控制器的上下文执行的操作   没有在其他上下文中注册,因此不同的视图控制器   将对数据有不同的看法。

     

但有时,检索它更容易或更合适   来自应用程序或文档以外的某个地方的上下文   查看控制器。您可能在基于Core Data的数据中使用的几个对象   应用程序保持对托管对象上下文的引用。管理   对象本身具有对其自身上下文的引用,各种各样   支持Core Data的控制器对象,例如数组和对象   控制器(OS X中的NSArrayController和NSObjectController,以及   iOS中的NSFetchedResultsController。

     

从其中一个对象中检索上下文具有优势   如果你重新设计你的应用程序,例如使用   多个上下文,您的代码可能仍然有效。例如,   如果您有托管对象,并且想要创建新的托管对象   与它相关的对象,你可以问原始对象   托管对象上下文并使用它创建新对象。这将   确保您创建的新对象与   原始