首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift核心数据结构

Swift核心数据结构
EN

Stack Overflow用户
提问于 2016-01-10 11:51:11
回答 2查看 999关注 0票数 1

我从Swift中的核心数据开始,正如我在许多教程中看到的那样,每个人都只在AppDelegate.swift中使用AppDelegate.swift

在我的应用程序中,我希望在多个视图中使用ManagedObjectContext,因此我需要一些共享该对象的机制。

我认为创建一个将在任何地方管理ManagedObjectContext的类是一种很好的方法。

我不确定ManagedObjectContext和其他与核心数据相关的对象是否可能被单例初始化,这是否是一种很好的方法?或者我最好在每个视图之间传输ManagedObjectContext (我不明白为什么会更好)。

对于核心数据的使用,您有什么建议或好的演示吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-10 12:01:38

基本上有三种选择:

  1. 将上下文从应用程序委托对象传递到初始视图控制器,然后分别从源视图控制器传递到目标视图控制器。
  2. 由于应用程序委托对象可以随时随地访问,所以在AppDelegate中保留核心数据堆栈(按照模板的建议),只需编写 让appDelegate = NSApplication.sharedApplication().delegate as!AppDelegate let managedObjectContext = appDelegate.managedObjectContext
  3. 将整个Core数据堆栈移动到一个单独的类中,并将其作为单例使用 类CoreDataManager: NSObject { class var sharedManager : CoreDataManager { Singleton = CoreDataManager() }返回Singleton.instance } // MARK:- Core数据堆栈惰性变量managedObjectModel: NSManagedObjectModel ={ //应用程序的托管对象模型。此属性不是可选的。如果应用程序无法找到并加载其模型,这将是一个致命错误。让NSBundle.mainBundle().URLForResource("MyModel",withExtension:“妈妈”!返回NSManagedObjectModel(contentsOfURL: modelURL)!}()惰性变量managedObjectContext: NSManagedObjectContext ={. 然后用它 设managedObjectContext =managedObjectContext
票数 3
EN

Stack Overflow用户

发布于 2016-01-10 13:13:16

这个问题在被问到上多次出现在StackOverflow上。您将询问是否应该将ManagedObjectContext从视图传递到视图。苹果的官方回答是肯定的

创建视图控制器时,要传递它应该使用的上下文。您传递一个现有上下文,或者(在希望新控制器管理一组离散编辑的情况下)为其创建一个新的上下文。通常,应用程序委托的责任是创建一个上下文,以传递给显示的第一个视图控制器。 视图控制器通常不应该从全局对象(如应用程序委托)中检索上下文--这使得应用程序体系结构变得僵硬。视图控制器也不应该为自己的使用创建上下文(除非是嵌套上下文)。这可能意味着使用控制器上下文执行的操作不会在其他上下文中注册,因此不同的视图控制器将对数据具有不同的透视图。

这叫做依赖注入。你是否选择使用它取决于你自己。依赖AppDelegate或创建单独的单例来访问managedObjectContext会使您的代码更“僵化”,就像他们所说的那样,而且在未来的道路上它可能会导致问题。

话虽如此,很多人用单身汉来做这种事。这是诱人的容易,成本并不是立即显现出来的。除了我上面发布的SO链接之外,谷歌搜索“依赖注入”将比我在这里的几个词更好地解释这些优点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34705033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档