Working with core data (переклад)

Вітаю з цим! До теперішнього часу ви вже створили простий додаток для користувачів, щоб перерахувати їх улюблені ресторани. Якщо ви працювали над попереднім вправою, то ви повинні зрозуміти основи того, як додати ресторан. Я спробував спростити процес і зосередитися на засадах UItableView. До цього моменту всі ресторани були зумовлені в вихідному коді і збережені в масиві. Якщо ви хочете зберегти ресторан, то найпростішим способом є додавання нового ресторану в існуючий масив ресторанів.
Однак, якщо ви залишите це таким, то ви не зможете зберегти новий ресторан. Утримання даних в пам'яті (наприклад, масив) нестабільно. Як тільки ви вийдіть з програми, всі зміни зникнуть. Нам потрібно знайти спосіб зберегти дані в незмінному вигляді.
Щоб зберегти дані в незмінному вигляді, вам потрібно буде зберегти їх в постійному сховище або в базі даних. Наприклад, зберігаючи дані в базі, дані будуть у безпеці, навіть якщо додаток завершить роботу або вийде з ладу. Файли - це ще один спосіб збереження даних, але вони більше підходять для зберігання невеликих обсягів даних, які вимагають частих змін. Наприклад, файли зазвичай використовуються для зберігання налаштувань програми. Якщо ви відкриєте папку Support Files в навігаторі проекту, то ви знайдете файл Info.plist. Цей файл властивостей використовується для зберігання налаштувань проекту.
Додатком FoodPin може знадобитися зберігати тисячі записів про ресторанах. Користувачі можуть також часто додавати дані або видаляти записи про ресторанах. В цьому випадку база даних - це відповідний спосіб обробки великого набору даних. У цьому розділі я розповім вам про структуру Core Data і покажу, як її використовувати для управління даними в базі. Ви внесете багато змін в існуючий проект, але після проходження цієї глави, ваше додаток дозволить користувачам зберігати свої улюблені ресторани.
Що таке Core Data?
Коли ми говоримо про постійні даних, ви, ймовірно, думаєте про базах даних. Якщо ви знайомі з Oracle або MySQL, то ви знаєте, що реляційна база даних зберігає дані у вигляді таблиць, рядків і стовпців. Ваша програма звертається до бази за допомогою SQL (Structured Query Language) запиту. Однак не плутайте дані ядра з базами даних. Хоча база даних SQLite є постійним сховищем за замовчуванням для Core Data в IOS. Core Data не є точно реляційної базою даних - насправді це платформа, яка дозволяє розробникам взаємодіяти з базою даних (або іншим постійним сховищем) об'єктно-орієнтованим способом.
Візьміть додаток FoodPin як приклад. Якщо ви хочете зберегти дані в базі даних, то ви несете відповідальність за написання коду для підключення до бази даних і витяг або оновлення даних за допомогою SQL. Це було б обтяжливо для розробників, особливо для тих, хто не знає SQL.
Core Data забезпечує більш простий спосіб збереження даних в постійному сховище за вашим вибором. Ви можете зіставляти об'єкти в ваших додатках до таблиці в базі даних. Простіше кажучи, це дозволяє вам керувати записами (select / insert / update / delete) в базі даних, навіть не знаючи SQL.
Core Data Stack
Перш ніж ми почнемо роботу над проектом, вам потрібно спочатку отримати базове уявлення про Core Data Stack. Дивіться на рисунок.

Це виглядає складно, правда? Безперечно. Тому в IOS 10 вводиться новий клас NSPersistentContainer. який спрощує управління стеком основних даних в ваших додатках. NSPersistentContainer - клас, з яким ви будете мати справу для збереження та відновлення. Спантеличені? Не турбуйтесь. Ви зрозумієте, що я маю на увазі, коли ми сконвертіруем додаток FoodPin з масивів в Core Data.
Використання шаблону основних даних
Найпростіший спосіб використовувати Core Data - включити опцію Core Data під час створення проекту. Xcode буде генерувати необхідний код в AppDelegate.swift і створювати моделі даних для цього.

Якщо ви створите проект CoreDataDemo з включеною опцією Core Data, то побачите наступні змінні і метод, що згенерував в класі AppDelegate:
Згенерований код надає змінну і метод:
- Мінлива persistentContainer є екземпляром NSPersistentContainer і инициализирована постійним сховищем з ім'ям CoreDataDemo. Пізніше ви будете використовувати цю змінну для взаємодії зі стеком Core Data.
- Метод saveContext () забезпечує збереження даних. Коли вам потрібно буде вставити / оновити / видалити дані в постійному сховище, ви викличте цей метод.
Якщо ви використовували Core Data в старій версії Xcode, то ви повинні виявити, що згенерований код був значно спрощений. NSPersistentContainer инкапсулирует Core Data stack і спрощує спосіб використання основних даних.
Питання в тому, як ми можемо використовувати цей шаблон коду в нашому існуючому проекті Xcode. Ми можете просто скопіювати і вставити код в AppDelegate.swift вашого проекту, але вам потрібно буде внести незначні зміни.
Вихідний шаблон коду був створений для проекту CoreDataDemo. Xcode називає ім'я файлу SQLite і моделі даних, використовуючи ім'я проекту. Для проекту FoodPin замість CoreDataDemo пишемо ім'я вашого FoodPin. Тому змініть наведену рядок коду на наступну:
Нарешті, додайте оператор import на початку класу AppDelegate. щоб імпортувати його. Core Data framework:
Примітка: Для довідки ви також можете завантажити цей шаблон проекту. щоб продовжити роботу.