Нативная разработка мобильных приложений



Download 3,69 Mb.
Pdf ko'rish
bet208/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   204   205   206   207   208   209   210   211   ...   228
Bog'liq
Нативная разработка мобильных приложений

Инициализация стека
Стек Core Data состоит из трех частей:
1) файла модели данных, который мы только что создали. Он хранит опи
-
сание сущности;
2) контейнера хранилища, связывающего приложение с самим хранили
-
щем. В качестве хранилища мы будем использовать базу данных SQLite, 
но вообще хранилищем может быть XML-файл или хранилище в памяти;
3) контекста управляемого объекта – своего рода «кеша», в котором хранят
-
ся все экземпляры 
BookManaged
Object
, пока они активны; они в точности 
соответствуют объектам, хранимым в базе данных.
Мы выполнили пункт 1, создав файл модели данных 
LibraryModel.xcdatamod-
el
. Но нам еще нужно выполнить пункты 2 и 3. Обычно инициализацию стека 
Core Data выполняют на запуске приложения. Для простоты мы заключим все 
необходимое в объект 
DataController
.
В Xcode создайте новый файл Swift с именем 
DataController
и добавьте его 
в проект. Введите в него следующий код:
import Foundation
import CoreData
class DataController {
var persistentContainer: NSPersistentContainer
init(completion: @escaping () ­> ()) {
persistentContainer = NSPersistentContainer(name: "LibraryModel")
persistentContainer.loadPersistentStores { (description, error) in
if let error = error {
fatalError("Core Data stack could not be loaded. \(error)")
}
// Вызывается после инициализации стека Core Data
DispatchQueue.main.async {
completion()
}
}
}
}
Рассмотрим поближе, что здесь происходит. Во-первых, в методе 
init(comp­
letion:)
класса 
DataController
мы инициализировали обработчик завершения. 
Этот обработчик будет вызван после настройки Core Data и позволит продол
-
жить запуск приложения.


334

Сохранность данных
Хранилище будет загружаться последовательно в любом потоке, выполнившем 
вызов. Мы можем загрузить хранилище асинхронно, добавив в 
description
свой
-
ство 
shouldAddStoreAsynchronously
со значением 
true
. Однако в этом примере мы 
не используем эту возможность, чтобы упростить загрузку стека Core Data.
Внутри инициализатора мы сначала присваиваем переменной экземпляра 
persistentContainer
ссылку на новый экземпляр 
NSPersistentContainer
. Этот кон
-
тейнер выполняет большую часть настроек и связывает файл модели данных 
с координатором хранилища. Для этого мы передаем его конструктору имя 
файла модели данных без расширения. После создания объекта 
NSPersistent­
Container
мы вызываем его метод 
loadPersistentStores(_:)
и передаем ему за
-
мыкание, выполняющее проверку ошибок. Если база данных недоступна, файл 
модели не может быть прочитан или возникла какая-то другая ошибка, мы вы
-
зываем 
fatalError
, чтобы завершить приложение. Если же хранилище было за
-
гружено правильно, мы вызываем 
completion()
– замыкание, которое передали 
в вызов инициализатора 
DataController
.
Теперь хранилище настроено, и в процессе его настройки мы настроили 
контекст управляемого объекта, доступный как свойство контейнера. Позже 
мы подробнее расскажем, как его использовать, а пока закончим настройку 
стека и используем только что созданный объект 
DataController
.
Откройте файл 
AppDelegate.swift
. Добавьте новое свойство 
dataController
с типом 
DataController!
. Вставьте в метод 
application(_:didFinishLaunchingWithOpt
ions:)
следующие строки перед инструкцией 
return
true
в самом конце:
// Инициализировать стек Core Data
dataController = DataController() {
// Точка переопределения для обновления пользовательского 
// интерфейса после завершения инициализации
}
Теперь класс 
AppDelegate
должен выглядеть так:
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var dataController: DataController!
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: 
[UIApplication.LaunchOptionsKey: Any]?) ­> Bool {
// Инициализировать стек Core Data
dataController = DataController() {
print("Core Data stack has been initialized.")
}
return true
}
...
}
Если теперь собрать и запустить приложение, вы увидите в консоли Xcode 
сообщение: «Core Data stack has been initialized».


Запись книг в хранилище 

335
Да! Наш стек Core Data запущен и работает, однако в данный момент он ни
-
чем не управляет. Все данные до сих пор извлекаются из 
catalog.json
. Давайте 
переключим наш 
ListDataSource
с использования JSON-файла на Core Data.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   204   205   206   207   208   209   210   211   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish