134
Хранение данных
ются «управляемыми объектами» и наследуют класс
NSManagedObjec
t
, который
является частью инфраструктуры Core Data. Большая часть работы с Core Data
выполняется на этом уровне вместе со следующим классом, который мы обсу
-
дим: контекстом управляемого объекта.
Контекст управляемого объекта, или
NSManagedObjectCon
text
, можно рассмат-
ривать как своеобразный черновик, в котором можно изменять данные в эк
-
земплярах объектов модели до их сохранения в базе данных. Контекст управ
-
ляемого объекта – это объект, который используется для описания контекста,
помогающего инфраструктуре Core Data понять, как должен создаваться и из
-
меняться ваш объект. Обычно в приложениях, использующих Core Data, есть
два типа контекстов: контекст представления (действующий в основном по
-
токе выполнения) и фоновый, или закрытый, контекст, который используется
для сохранения объектов и фактически преобразует экземпляры
NSManagedOb
ject
в записи в базе данных с помощью команд
INSERT
и
UPDATE
.
Прежде чем сохранять данные и/или извлекать их из хранилища, необходи
-
мо настроить стек Core Data. Обычно настройка выполняется в момент запуска
приложения. Часто большинство настроек выполняются в методе
application(_
:didFinishLaunchingWithOptions:)
делегата приложения.
Раньше процесс настройки был довольно громоздким, но теперь в Core Data
есть удобный класс
NSPersistentContainer
, инициализирующий стек Core Data.
Этот класс выполняет все необходимые настройки, описанные в файле с опре
-
делением
модели управляемых объектов, и имеет удобный метод для асин
-
хронной загрузки хранилища. Вот как он используется:
let persistentContainer = NSPersistentContainer(name: "MyModel")
persistentContainer.loadPersistentStores { (description, error) in
// Обработчик завершения загрузки
}
Этот код создает контейнер для целевой
модели управляемых объектов
с именем
"MyModel"
и сохраняет ссылку на него в переменной
persistentCon
tainer
. Следующая строка загружает хранилище, в данном случае базу данных
SQLite, с диска и по окончании вызывает обработчик завершения для провер
-
ки ошибок и выполнения любого необходимого кода. Если добавить этот код
в код запуска в делегате приложения, приложение найдет файл модели управ
-
ляемых объектов
MyModel.xcdatamodeld
в пакете приложения и использует его
для создания или загрузки файла базы данных SQLite с именем
MyModel.sqlite
из
каталога
Application Support
.
При желании есть возможность настроить местоположение файлов базы данных.
Исторически для хранения баз данных SQLite использовался каталог
Documents
.
Ваши требования могут отличаться, и для их удовлетворения вы можете добавить
NSPersistentStoreDescription
после создания
NSPersistentContainer
и сохранить
его в
persistentStoreDescription
. Есть и другие варианты
описания контейнера
хранилища, но они выходят за рамки этой главы.
Внутри замыкания, обрабатывающего событие завершения загрузки, нужно
проверить наличие ошибок, а затем обновить пользовательский интерфейс,
который может ожидать загрузки хранилища.
Вот более полный пример за
-
грузки контейнера хранилища:
iOS
135
let persistentContainer = NSPersistentContainer(name: "MyModel")
persistentContainer.loadPersistentStores { (description, error) in
guard let error = error else {
// Сообщить об ошибке пользователю и/или попытаться исправить ее
return
}
// Обновить пользовательский интерфейс
// и/или начать
использовать Core Data
}
Теперь, когда стек Core Data запущен и работает, посмотрим, как определять
объекты.
Do'stlaringiz bilan baham: