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

Если эта диаграмма не имеет смысла, не беспокойтесь об этом. Мы собираемся подробно рассмотреть этот стек.

  1. Описание сущности( NSEntityDescription )
    TLDR: это основные данные, эквивалентные описанию класса
    Описание сущности можно рассматривать как описание класса. Точно так же, как вы создаете Класс для Собаки и даете ему имя, вес и породные Свойства, вы должны создать Сущность для Собаки и дайте ему имя, вес и породу Атрибуты. Описание сущности — это, по сути, план вашей сущности, который используется для создания экземпляров этих сущностей.
  2. Управляемый объект( NSManagedObject )
    TLDR: это основные данные, эквивалентные экземпляру класса или объекта
    Управляемые объекты — это экземпляры Сущности. Точно так же, как вы создадите несколько экземпляров класса Person, вы создадите несколько экземпляров сущности Person, за исключением того, что экземпляры сущности Person, как вы можете догадаться по имени, будут управляться Core Data.
  3. Управляемая объектная модель( NSManagedObjectModel )
    TLDR: это коллекция описаний сущностей из вашей модели данных
    Управляемая объектная модель — это, по сути, ваш файл модели данных. (.xcdatamodeld). Каждый объект, который вы определяете в своей модели данных, будет доступен в виде описания объекта благодаря управляемой объектной модели.
  4. Контекст управляемого объекта( NSManagedObjectContext )
    TLDR: это блок, содержащий ваши управляемые объекты
    Контекст управляемого объекта — это контекст, в котором находятся ваши управляемые объекты. реальный. По сути, это коробка, в которой хранятся ваши управляемые объекты. Вы можете сохранить свои объекты, вызвав для них save. Вы также можете получить свои объекты из этого ящика. Эта метафора терпит неудачу, когда вы спрашиваете: «А что, если вы добавите новые объекты? Будут ли они автоматически сохранены?» Ну нет. Вам придется снова сохранить поле, чтобы добавить изменения. Подробнее об этом в посте Core Data Metaphors.
  5. Постоянное хранилище( NSPersistentStore ) и постоянное хранилище объектов( NSPersistentObjectStore)
    TLDR: постоянное хранилище — это представление вашего файла хранилища данных
    Вам не нужно слишком много знать о постоянных хранилищах и постоянных хранилищах объектов. Хотя это не одно и то же, в целом вы можете использовать их взаимозаменяемо. Когда Core Data сохраняет контекст управляемого объекта, он сохраняет его в файл(ы) .storeData. Все, что вам действительно нужно знать, это то, что постоянные хранилища являются представлениями этих файлов. Если вам действительно нужно знать, что такое постоянные хранилища объектов, это просто карты того, где ваши объекты в коде хранятся в постоянных хранилищах.
  6. Координатор постоянного хранилища( NSPersistentStoreCoordinator )
    TLDR: координатор постоянного хранилища управляет постоянными хранилищами и позволяет рассматривать все хранилища данных как единое унифицированное хранилище
    Даже если вы почти никогда не коснетесь координатора постоянного хранилища, он является основой Core Data. Его основная задача — представить своим контекстам управляемых объектов постоянные хранилища как «единое унифицированное хранилище». При сохранении или извлечении из контекста управляемого объекта координатор постоянного хранилища является ссылкой, позволяющей выполнить действие.

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

Итак, пойдем слева направо. Управляемая объектная модель — это в значительной степени ваш файл модели данных. Это набор описаний сущностей, основанный на сущностях и их деталях, указанных вами в модели данных.

Модель управляемых объектов предоставляет нам описания сущностей, из которых мы создаем экземпляры наших управляемых объектов. Все наши управляемые объекты живут в контексте управляемых объектов.

Мы можем сохранить управляемые объекты в контексте управляемых объектов в файлы хранилища (постоянные хранилища). Мы также можем получать объекты из контекста управляемых объектов. Он сохраняет и извлекает из одной единицы хранения. Однако на самом деле происходит то, что координатор постоянного хранилища представляет все файлы хранилища как единое целое.

Аааа вот и все. Это игроки и рабочие части Core Data!