2016-09-17 80 views
0

有一件事我不完全理解与CoreData(我找不到一个很好的答案我的问题):你怎么在一个应用程序中使用CoreData多个UIViewcontrollers使用核心数据(多个ViewControllers)

在我玩弄核心数据在多个控制器的时刻,我在每个VC键入此:

let app = UIApplication.sharedApplication().delegate as! AppDelegate 
    let context = app.managedObjectContext 
    let entity = NSEntityDescription.entityForName("EntityName", inManagedObjectContext: context)! 
    let entityName = EntityName(entity: entity, insertIntoManagedObjectContext: context) 

但我不认为这是与CoreData在多个控制器上工作的最佳实践(侧面的问题:这是否会影响我的应用的性能?)。什么是最喜欢的方式?

  1. 我是否在每个viewcontroller中创建一个托管对象上下文? (很多复制粘贴,像我现在这样做)
  2. 我是否创建一个创建CoreData的单例? 我读的地方,这不是首选方式
  3. 难道我通过管理对象范围内使用 塞格斯(或应用程序委托的功能'*didFinishLaunchingWithOptions*'设置一个公共情境变量)下一个控制器?
  4. 还有别的吗?

在此先感谢!

回答

-1

你要做的是避免代码重复。因此,只需将代码放入一个函数中并将其放置在某个位置即可。这可能是对UIViewControlerAppDelegate分机或只是一个辅助功能

这是怎么上UIViewController延长会是什么样子:

extension UIViewController 
{ 
    func doCoreDataWork() 
    { 
     let app = UIApplication.sharedApplication().delegate as! AppDelegate 
     let context = app.managedObjectContext 
     let entity = NSEntityDescription.entityForName("EntityName", inManagedObjectContext: context)! 
     let entityName = EntityName(entity: entity, insertIntoManagedObjectContext: context) 
    } 
} 

然后从任何视图控制器打电话doCoreDataWork()

不,它没有任何关系的表现

0

3->设置一个公共主队列MOC是一个很好的做法。因为主队列是一个串行队列。

1->使用主队列MOC仅用于为每次编辑提取和创建子MOC是一种很好的做法。因为编辑可获取的MOC可能会导致冲突。

2->您可以尝试创建一个用于获取共享主队列MOC的单例实例,并定义一些创建用于编辑的子上下文的函数。

4->但实际上没有抽象情况的最佳实践。

我这么认为。