8 Core Data для Mac и iOS. Контроллеры: интеграция модели данных с кодом

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

На Mac OS для управления данными есть следующие инструменты:

  • key-value coding (KVC), 
  • key-value observing (KVO), 
  • и bindings (недостуно для iOS).
С другой стороны для iOS доступно больше views:



master view controller из iOS проекта по шаблону Master-Detail:


storyboards нет на Mac OS.

connections для Mac OS app
Employee Set и Manager Set это array controllers.
Department Controller это object controller.
А NewObjectSheetController это custom-written object в этом проекте (реализован в файлах NewObjectSheetController.h и NewObjectSheetController.m).

На Mac OS, контроллеры это посредники между структурами данных (например, массивами) и элементами интерфейса. На iOS, также обеспечивают функциональность управления представлениями (views) с помощью navigators и toolbars.

single items:
  • Object — наследник NSObject. Добавляется в Interface Builder и потом в Attributes inspector изменяется его имя на MySpecialObject (то что вам нужно). Когда объект создается в runtime, код в MySpecialObject.h и MySpecialObject.m запускается чтобы обеспечить функциональность объекта.
  • View Controller — view controller или custom subclass в котором реализован ваш код. Вы может заменить его своим кодом, но часто это не нужно. (Сравните с UIViewController в iOS, где надо едва ли не всегда заменять код. На iOS binding-like функциональность реализуется кодом для iOS-контроллера. Поэтому почти всегда приходится делать override базового view-контроллера. А на Mac OS это делается не так часто.)
  • Managed Object Context — Говорящее имя: context для NSManagedObject или его потомков. Этот managed object context взаимодействовать с persistent store.


group-based controllers:
  • Object Controller — контроллер управляющий любым объектом.
  • Array Controller — коллекция объектов хранящаяся в массиве или множестве.
  • Dictionary Controller и Tree Controller — стандартные коллекции объектов хранящие данные в разных конфигурациях.
  • User Defaults Controller.


Текстовое поле Budget соединено с selection.budget через binding.
А текстовое поле Department соединено с selection.name через другой binding.


Связь между свойством value текстового поля и данными из Core Data 
На данном скриншоте выделено поле поэтому показывается обратное соединение (от текстового поля к данным).


Здесь выделен Employee Set controller. content привязан к Department Controller. contentset это binding NSArrayController-а, чем Employee Set и является. binding установлен от contentset свойства в Employee Set к ключу selection и значению employees. selection - это выделенные элемент в массиве, а employees это Core Data model relationship.

iOS

iOS objects:
  • Object—также как на Mac OS.
  • External Object—placeholder для объекта который находится в мира приложения. 


controllers:
  • View Controller—Так же как на Mac OS, но также соотвествует iOS view management structure.
  • Table View Controller—часто используемый контроллер включает в себя многое из bindings функциональности, в частности UITableViewDataSource протокол, который часто добавляется к производному классу от UITableViewController. UITableViewDelegate также часто добавляется к производным классам чтобы реализовать отображение и например высоту строк или управлять выделениями и редактированиями. 
  • Split View Controller, Navigation Controller, Tab Bar Controller, и Page View Controller—Более сложные чем базовый UIViewController. Много специализированного кода в этих контроллерах посвящено управлению множества различных представлений.