我正在尝试学习核心数据的基础知识,并已经启动了一个单一的视图应用程序,同时拥有一个主细节应用程序的基本模板,并打开了核心数据以供参考。
我被困在通过MasterViewController通过AppDelegate.swift设置我的MasterViewController中。
到目前为止,主细节模板使用的是一个我没有使用的拆分视图,那么我如何使用一个单一视图应用程序来做类似的事情呢?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// How to reference MasterViewController???
controller.managedObjectContext = self.managedObjectContext
return true
}
发布于 2016-05-24 10:21:54
您可以使用以下代码访问整个应用程序的托管对象上下文。
let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
这样您就可以删除下面的行。
controller.managedObjectContext = self.managedObjectContext
发布于 2016-05-24 22:40:20
我建议将 NSManagedObjectContext
传递给适当的视图控制器/s,就像Apple中推荐的那样。这涉及以下步骤:
NSManagedObjectContext
的强烈引用;NSManagedObjectContext
公共属性;从苹果文档..。
获取托管对象上下文 In iOS: 按照约定,您可以从视图控制器获得上下文。不过,您必须适当地实现您的应用程序,才能遵循此模式。 实现与核心数据集成的视图控制器时,可以添加NSManagedObjectContext属性。 创建视图控制器时,要传递它应该使用的上下文。您传递一个现有上下文,或者(在希望新控制器管理一组离散编辑的情况下)为其创建一个新的上下文。通常,应用程序委托的责任是创建一个上下文,以传递给显示的第一个视图控制器。 视图控制器通常不应该从全局对象(如应用程序委托)中检索上下文--这使得应用程序体系结构变得僵硬。视图控制器也不应该为自己的使用创建上下文(除非是嵌套上下文)。这可能意味着使用控制器上下文执行的操作不会在其他上下文中注册,因此不同的视图控制器将对数据具有不同的透视图。 但有时,从应用程序、文档或视图控制器以外的其他地方检索上下文更容易或更合适。在基于核心数据的应用程序中可能使用的几个对象保持对托管对象上下文的引用。托管对象本身具有对自己上下文的引用,支持核心数据的各种控制器对象也是如此,例如数组和对象控制器( OS中的NSArrayController和NSObjectController,iOS中的NSFetchedResultsController )。 从这些对象之一检索上下文具有这样的优势,即如果您重新架构您的应用程序,例如使用多个上下文,则您的代码可能仍然有效。例如,如果您有一个托管对象,并且希望创建一个与其相关的新托管对象,则可以向原始对象请求其托管对象上下文,并使用该对象创建新对象。这将确保您创建的新对象与原始对象处于相同的上下文中。
https://stackoverflow.com/questions/37410562
复制相似问题