创建我自己的核心数据堆栈的优势和用途

时间:2015-02-02 08:46:32

标签: ios swift core-data

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

  1. 为什么我需要编写一个新类来处理Core Data Stack而不是使用XCode在AppDelegate.swift中提供给我们的代码,这样做有什么好处吗?
  2. 本书获取ManagedObjectContext的方法是通过segue将前一个上下文传递给当前的Controller。首先,我在AppDelegate.swift中初始化上下文,并将此值传递给topViewControllerself.window!.rootViewController as UINavigationController(A)中名为“context”的属性。其次,如果我想在控制器B中使用上下文,我需要在B中声明一个名为“context”的属性,并通过segue传递A的上下文属性let dest = segue.destinationViewController as B dest.context = self.context
    这是使用Context的唯一方法吗?我宁愿用if let context = (UIApplication.sharedApplication().delegate as AppDelegate).managedObjectContext来获取上下文..
  3. 如果我想使用模型管理像fetch这样的核心数据,那么从控制器传递“上下文”到init我的模型类是否正确?
  4. 谢谢!

1 个答案:

答案 0 :(得分:0)

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