6 Core Data для Mac и iOS. Core Data Model Editor


Модель данных находится в файле <name of your project>.xcdatamodel.
Например если проект называется Core Data iOS, то будет папка Core Data iOS в которой будет файл проекта Core Data iOS.xcodeproj и внутренняя папка Core Data iOS в которой и будет файл модели данных. Для переименования файлов проекта надо использовать команду Edit, Refactor, Rename.


Master-Detail template в Xcode 4 заменил Split View Controller template из предыдущих версий. Этот шаблон уже включает в себя модель данных. 


Когда iOS устройство в режиме landscape то приложение показывает список элементов данных в split view controller. Когда выбирается элемент данных из списка, то он детализируется в split view controller с другой стороны. В portrait режиме навигационная панель вверху окна имеет кнопку, которая показывает список элементов данных pop-over способом. Если коснуться + то в список добавляется элемент типа дата значение которого равно моменту времени касания.

Core Data модель может содержать сущности, fetch запросы, или конфигурации.

Редактирование атрибутов сущности:

Добавление атрибутов, связей, fetched-свойств в grid стиле редактора:

Каждый relationship может иметь свои правила:
. Cardinality—Количество сущностей с каждой стороны relationship (one-to-one, one-to-many, или many-to-many).
Например relationship от job к customer один-к-одному. Одна работа может иметь только одного заказчика. С другой стороны заказчик имеет много работ, один-ко-многим связь. Может быть также связь многие-ко-многим, это если два или более людей могут иметь общую работу (например в ресторане за столом люди решают какое вино заказать, в данном случае вино - это работа). Many-to-many relationships реализуются посредством промежуточной таблицы которая называется join table. Core Data это делает автоматически

. Delete rule—Что случается когда одна сущность в relationship удаляется (ничего не делать, удалить другую сущность, предотвратить удаление). Помогает сохранить ссылочную целостность.
4 типа на выбор:
. Nullify—The inverse relationship is set to null. Например, если удалить customer с одной или больше работами, relationship от job к no-longer-existing customer будет установлен в null.
. Deny—Не удастся удалить объект, в случае с jobs и customers, если вы учтановите customer-to-job delete rule в значение deny, вы получите ошибку если попытаетесь удалить customer у которого одна или больше работа.
. Cascade—Удаление customer у которого одна или больше работ, удалит самого customer и все его работы.
. No Action—Пользователи могут делать всё что хотят. Это значение позволяет пользователям БД разрушить ее relational integrity—логику, которая удерживает всё вместе.

Если relationship двунаправленный (bidirectional), то из каждой таблицы можно получить доступ к другой. В Core Data relationships однонаправленные (unidirectional). Например один relationship может быть от Job к Customer, а второй от Customer к Job. Оба комбинируются в модели данных путем указания inverse relationship для каждого relationship. Таким иным путем реализуется концепция bidirectional relationship. В общем relationships в Core Data состоят из двух unidirectional relationships между двумя сущностями, that are the inverse of one another..

Добавление Relationship из grid editor:
Линия со стрелками в обе стороны означает inverse relationship.

Добавление из table editor:
Имя нового relationship лучше заменить на что-нибудь более значительное чем newRelationship. В Job entity, relationship указывает Customer entity, поэтому имя этого relationship - customer. В Customer entity, relationship указывает Job entity, поэтому имя - jobs. Relationships как правило указываются в нижнем регистре. В data model inspector можно сделать jobs relationship типа to-many (полное имя one-to-many) relationship. Проверьте правильно ли установилась inverse relationship. В table view style это надо делать вручную. В grid view style это делается автоматически. В grid view, doublearrows показываются на конце to-many relationship.