2016-09-17 3 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. Я создаю контекст управляемого объекта в каждом представлении? (Много копий-пасты, как и сейчас)
  2. Создать лингтон для создания CoreData? Я где-то читал, что это не является предпочтительным способом
  3. ли я передать контекст управляемых объектов к следующему контроллеру с помощью перетекает (или установить переменную общественный контекст в функции приложения делегата '*didFinishLaunchingWithOptions*')?
  4. Что-то еще?

Заранее благодарен!

ответ

-1

Что вы пытаетесь сделать, это избежать дублирования кода. Поэтому просто приведите код в одну единственную функцию и поместите его где-нибудь. Это может быть продолжением на UIViewControler или AppDelegate или просто вспомогательная функция

Это как расширение на 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-> Вы можете попробовать создать экземпляр singleton для получения общей основной очереди MOC и определить некоторые функции, которые создают дочерний контекст для редактирования.

4-> Но на самом деле нет лучшей практики для абстрактных ситуаций.

думаю.

Смежные вопросы