Create my own Core Data Stack的优点和用法

Create my own Core Data Stack's advantages and usage

背景: 最近我正在阅读 'CoreData by tutorials' 来学习 Core Data。这本书向我展示了如何在代码中创建一个新的核心数据堆栈,它鼓励我们这样做。
问题:

  1. 为什么我需要写一个新的 class 来处理核心数据堆栈而不是使用 XCode 在 AppDelegate.swift 中提供给我们的代码,这样做有什么好处吗?
  2. 书上获取ManagedObjectContext的方式是通过segue将之前的context传给当前的Controller。比如,首先我在 AppDelegate.swift 中初始化一个上下文,然后将此值传递给 self.window!.rootViewController as UINavigationControllertopViewController (A) 中名为 "context" 的 属性。其次,如果我想在控制器B中使用上下文,我需要在B中声明一个名为"context"的属性,并通过segue
    [=13传递A的上下文属性 =]
    这是使用上下文的唯一方法吗?我宁愿使用
    if let context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext 到处获取上下文..
  3. 如果我想使用模型来管理像获取这样的核心数据,从控制器传递 "context" 来初始化我的模型 class 是正确的方法吗?

谢谢!

  1. 关注点分离。如果不仔细管理,应用程序委托很快就会成为初始化应用程序部分的一站式商店,这会降低可读性/可维护性;
  2. 就我个人而言,我发现将 MOC 传递给控制器​​既乏味又容易出错。在大型项目中,我更喜欢使用单例,如 RestKit: [[RKManagedObjectStore defaultStore] mainQueueManagedObjectContext];
  3. 如果我没理解错的话,你是在问如何创建 NSFetchRequest 个实例?如果是这样,那么是的,您将 MOC 用于主队列(无论是作为 属性 还是通过其他方式传递给控制器​​都是实现细节)。