2016-06-07 4 views
1

Мне было интересно, какая была лучшая практика для выполнения managedObjectContext. Когда я впервые начал изучать swift/iOS/Xcode в начале этого года, я помещал эту строку в каждый класс для ViewControllers/TableViewControllers.Должен ли я создать новый managedObjectContext для каждого ViewController Swift

let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

И все работает правильно. Но потом я подумал, что в какой-то момент я кое-что прочитал, сказав, что для каждого ViewController/TableViewController используется тот же managedObjectContext. И я интерпретировал это, чтобы отправить мою исходную переменную moc в каждый ViewController/TableViewController. Для этого я начал отправлять его в функцию «prepareForSegue». Таким образом, только первый вид имел код выше, а все остальное только var moc: NSManagedObjectContext?, которое будет установлено из функции prepareForSegue.

Но чем больше я учусь, я начинаю думать, что AppDelegate создает реальную managedObjectContext и let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext линия просто установив, что managedObjectContext к MOC переменной, а на самом деле не делает новый managedObjectContext.

Должен ли я продолжать использовать функцию prepareForSegue для отправки моей переменной moc во все связанные ViewControllers/TableViewControllers, или я не должен беспокоиться об этом и настраивать ее, используя код вверху?

спасибо.

+0

Вы почти наверняка правильно о AppDelegate создания одного объекта и передавая вам ссылку. ** На мой взгляд **, однако, диспетчеры взглядов действительно не должны знать механику того, как их данные будут получены. Возможно, вам захочется взглянуть на структуру MVC, где объект Model отвечает за передачу данных и контроллеров с ним, отправку изменений и получение текущего состояния. –

+0

Если вам интересно, вы можете посмотреть https://realm.io/news/slug-marcus-zarra-exploring-mvcn-swift/ Вкратце упоминает разные методы обработки 'managedObjectContext', но говорит о вашем большом вопросе о архитектуре приложения , – beyowulf

+0

Спасибо, я обязательно это сделаю! –

ответ

1
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext 

это прекрасно, поскольку он не создает новый контекст, а просто дает вам новую ссылку на тот же контекст. На самом деле он ничем не отличается от «отправки исходной переменной moc в функцию« prepareForSegue »». Вы делаете то же самое двумя разными способами, вот и все.

Читайте о стоимости и ссылочных типов в Swift: Classes and structures

+0

Большое вам спасибо! Было утомительно пытаться отправить одну и ту же переменную moc через все мое приложение. –

+0

Добро пожаловать, приятель! –

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