【问题标题】:Should I make a new managedObjectContext for each ViewController Swift我应该为每个 ViewController Swift 创建一个新的 managedObjectContext
【发布时间】:2016-06-07 16:34:05
【问题描述】:

我想知道执行managedObjectContext 的最佳做法是什么。今年早些时候,当我第一次开始学习 swift / iOS / Xcode 时,我在 ViewControllers / TableViewControllers 的每个课程中都使用了这一行。

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

一切正常。但后来我想我在某个时候读到了一些东西,说对每个 ViewController / TableViewController 使用相同的managedObjectContext。我将其解释为将我的原始 moc 变量发送到每个 ViewController / TableViewController。为此,我开始在“prepareForSegue”函数中发送它。所以只有第一个视图有上面的代码,其他的只有var moc: NSManagedObjectContext?,可以从prepareForSegue函数中设置。

但是我学到的越多,我开始认为 AppDelegate 正在创建实际的 managedObjectContext,而 let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 行只是将 managedObjectContext 设置为 moc 变量,而不是实际创建一个新的 @ 987654330@.

那么我应该继续使用prepareForSegue 函数将我的 moc 变量发送到所有链接的 ViewControllers / TableViewControllers,还是应该不用担心并使用顶部的代码进行设置?

谢谢。

【问题讨论】:

  • 您几乎可以肯定 AppDelegate 创建一个对象并向您传递一个引用是正确的。 在我看来,尽管如此,视图控制器确实不应该知道如何获取数据的机制。您可能想查看 MVC 结构,其中 Model 对象负责数据和控制器与其通信、发送更改和接收当前状态。
  • 如果您有兴趣,您可以观看realm.io/news/slug-marcus-zarra-exploring-mvcn-swift 简要提及处理managedObjectContext 的不同方法,但会谈到您关于应用架构的更大问题。
  • 谢谢,我一定会的!

标签: ios swift2 xcode7 nsmanagedobjectcontext


【解决方案1】:
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

这很好,因为它不会创建新的上下文,而只是为您提供对同一上下文的新引用。事实上,它与“在 'prepareForSegue' 函数中发送原始 moc 变量”没有任何不同。你用两种不同的方式做同样的事情,就是这样。

阅读 Swift 中的值和引用类型:Classes and structures

【讨论】:

  • 非常感谢!尝试通过我的整个应用程序发送相同的 moc 变量变得乏味。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 2019-06-30
相关资源
最近更新 更多