我正在尝试学习核心数据的基础知识,并开始使用单个视图应用程序,同时拥有主要详细信息应用程序的基本模板,核心数据可供参考。
我试图通过AppDelegate.swift在我的MasterViewController中设置我的managedObjectContext。
我到目前为止,主 - 详细信息模板使用的是我没有使用的拆分视图,那么如何只使用单视图应用程序进行类似的操作呢?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// How to reference MasterViewController???
controller.managedObjectContext = self.managedObjectContext
return true
}
答案 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。
从其中一个对象中检索上下文具有优势 如果你重新设计你的应用程序,例如使用 多个上下文,您的代码可能仍然有效。例如, 如果您有托管对象,并且想要创建新的托管对象 与它相关的对象,你可以问原始对象 托管对象上下文并使用它创建新对象。这将 确保您创建的新对象与 原始