使用核心数据(多个ViewControllers)

时间:2016-09-17 10:55:29

标签: ios swift core-data

关于使用CoreData(我无法找到问题的答案),我完全不了解一件事:你如何使用UIViewcontrollers一个多个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

但我不认为这是在多个控制器上使用CoreData的最佳做法(方面的问题:这会对我的应用程序的性能产生影响吗?)。什么是最喜欢的方式?

  1. 我是否在每个viewcontroller中创建托管对象上下文? (很多复制粘贴,就像我现在正在做的那样)
  2. 我是否为'*didFinishLaunchingWithOptions*'的创建创建单身人士? 我在某处读过这不是首选的方式
  3. 我是否使用将托管对象上下文传递给下一个控制器 segues(或在app delegate' s函数Log中设置公共上下文变量)?
  4. 别的什么?
  5. 提前致谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

4->但实际上抽象情况并不是最佳实践。

我想是的。

答案 1 :(得分:-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()

不,它与性能无关