2015-03-10 3 views
3

Часть описания яблок шаблона MVC: «Контроллер обновляет модель». Я интерпретирую это просто: контроллер вызывает методы на модели, в результате чего изменяется его внутреннее состояние.Лучшая практика передачи объекта модели контроллеру вида в какао

Но для объекта контроллера для вызова метода на объект модели ему нужна ссылка на объект модели. Если нескольким контроллерам необходимо обновить модельный объект, нам нужно несколько ссылок на объект модели - по одному для каждого контроллера.

Я не хочу, чтобы мои контроллеры добирались до глобального пространства, размещая другие объекты. Я хочу, чтобы объекты приложения более высокого уровня подключались к объектам домена нижнего уровня.

Я иду из других платформ, где мы используем контейнеры IOC для этого материала.

Ищите лучшие практики, как объекты модели передаются в приложении какао.

Конкретный пример: если я добавлю CoreData к шаблону проекта приложения какао в xCode, в объявлении приложения создается экземпляр managedObjectContext. Как передать этот экземпляр, например, контроллеру представления или вложенному контроллеру представления?

Я использую Swift.

ответ

2

конкретный пример: если я добавлю CoreData к шаблону проекта приложения какао в xCode, управляемый объектObjectContext создается в делегате приложения. Как передать этот экземпляр, например, контроллеру представления или вложенному контроллеру представления?

Таким образом, лично я нахожу это анти-шаблон: заполнение 'глобальных' данных в делегате приложения.

Но это то, что очень распространено в iOS, и, как вы заметили, стандартный шаблон Xcode. К сожалению.

Чтобы сделать это немного более работоспособным, то, что я обычно делаю, делает частным делегатом приложения managedObjectContext. Затем, когда другой объект, в основном UIViewController, должен получить доступ к этому контексту, я явно передаю его в UIViewController, когда я его создаю.

И когда этому диспетчеру просмотра необходимо отобразить новый контроллер вида, например, некоторое подробное представление, я снова передаю ему контекст.

Тогда, по крайней мере, там более ясная форма ответственности. И это упрощает тестирование, поскольку контроллеры представлений просто необходимо настроить (или ввести в терминах IoC) вместо захвата жестко закодированных глобальных объектов.

Я знаю, что это не полный ответ на то, что вы просили, но я подумал, что этот бит был самым интересным из вашего вопроса.

+0

Спасибо, что нашли время. Как передать модель контроллеру вида, если контроллер создан из раскадровки? – weenzeel

+0

Вы можете сделать первоначальный UISegue вручную из своего делегата приложения. –

+0

Ах круто. Не знал этого. Я постараюсь это прочитать. – weenzeel

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

  • Нет связанных вопросов^_^