我从Swift中的核心数据开始,正如我在许多教程中看到的那样,每个人都只在AppDelegate.swift中使用AppDelegate.swift。
在我的应用程序中,我希望在多个视图中使用ManagedObjectContext,因此我需要一些共享该对象的机制。
我认为创建一个将在任何地方管理ManagedObjectContext的类是一种很好的方法。
我不确定ManagedObjectContext和其他与核心数据相关的对象是否可能被单例初始化,这是否是一种很好的方法?或者我最好在每个视图之间传输ManagedObjectContext (我不明白为什么会更好)。
对于核心数据的使用,您有什么建议或好的演示吗?
发布于 2016-01-10 12:01:38
基本上有三种选择:
AppDelegate中保留核心数据堆栈(按照模板的建议),只需编写
让appDelegate = NSApplication.sharedApplication().delegate as!AppDelegate let managedObjectContext = appDelegate.managedObjectContext发布于 2016-01-10 13:13:16
这个问题在被问到上多次出现在StackOverflow上。您将询问是否应该将ManagedObjectContext从视图传递到视图。苹果的官方回答是肯定的
创建视图控制器时,要传递它应该使用的上下文。您传递一个现有上下文,或者(在希望新控制器管理一组离散编辑的情况下)为其创建一个新的上下文。通常,应用程序委托的责任是创建一个上下文,以传递给显示的第一个视图控制器。 视图控制器通常不应该从全局对象(如应用程序委托)中检索上下文--这使得应用程序体系结构变得僵硬。视图控制器也不应该为自己的使用创建上下文(除非是嵌套上下文)。这可能意味着使用控制器上下文执行的操作不会在其他上下文中注册,因此不同的视图控制器将对数据具有不同的透视图。
这叫做依赖注入。你是否选择使用它取决于你自己。依赖AppDelegate或创建单独的单例来访问managedObjectContext会使您的代码更“僵化”,就像他们所说的那样,而且在未来的道路上它可能会导致问题。
话虽如此,很多人用单身汉来做这种事。这是诱人的容易,成本并不是立即显现出来的。除了我上面发布的SO链接之外,谷歌搜索“依赖注入”将比我在这里的几个词更好地解释这些优点。
https://stackoverflow.com/questions/34705033
复制相似问题