Лекция 11 посвящена демонстрационному примеру «Smashtag L11« с использование Core Data. Этот пример построен на основе приложения «Smashtag L9«, которое по существу является клиентом Twitter, выбирающем твиты по специальной строке поиска, например, #stanford. Он демонстрирует все теоретические положения, представленные на Лекции 10.
Задачей демонстрационного приложения «Smashtag L11« является показ списка всех пользователей Twitter, кто твитил, например, со #stanford в своем тексте. Должны быть учтены не только твиты, полученные в результате последнего поиска для строки #stanford, но и вообще все твиты, когда-либо связанные с поиском по строке #stanford. Для этого используется база данных Core Data. Каждый раз при получении твитов «из сети» с помощью специального фреймворка Twitter c Лекции 9, они не только показываются на экране, но и записываются в Core Data. Потом мы сможем запрашивать эти твиты и получать любую информацию, включая получение списка пользователей, которые твитили с текстом, содержащим, например, #stanford.
Подробно демонстрируются все этапы создания приложения с Core Data:
- Графическое построение в Xcode Модели Данных (или схемы базы данных) для двух Сущностей Tweet и TwitterUser c Атрибутами и Взаимосвязями типа «To One» и «To Many«.
- Получение контекста NSManagedObjectContext для работы с базой данных, в том числе и из самого NSManagedObject.
- Автоматическое создание в Xcode NSManagedObject subclasses для Сущностей Tweet и TwitterUser.
- Заполнение данными взаимосвязанных Сущностей.
- Выборка и отображение данных из Core Data с помощью NSFetchResultsController, а точнее с помощью прекрасного класса CoreDataTableViewController, специально реализованного на его основе Полом Хэгерти для этого курса..
- Формирование запросов, содержащих обращение как непосредственно к Атрибутам Сущности, так и к ее Взаимосвязям.
Все операции с базой данных выполняются в предположении, что вы работаете в многопоточной среде и некоторые операции могут «выбрасывать» (throws) ошибки. «Асинхронность» выполнения операций с базой данных поставлена во главу этого демонстрационного приложения. Показаны некоторые «парадоксы» этой асинхронности. Рассматриваются различные варианты обработки ошибок с помощью do {…} catch let error и try, а также try?.
Акцентируется внимание на том, что если вы работаете с одной стороной Взаимосвязи, другая сторона Взаимосвязи синхронизируется автоматически, и это совершенно замечательная способность Core Data. Вам никогда не надо беспокоиться об целостности базы данных, Core Data управляет целостностью в любой момент времени вместо вас.
В конце Лекции 11 обсуждается важность проектирования правильной схемы базы данных, если от вас требуется сортировка по количеству некоторых объектов в базе данных, что является предметом Домашнего Задания 5.
Лекция и слайды на английском языке представлены в iTunes название “11. Core Data Demo”. Код демонстрационного примера «Smashtag L9» для Swift 3.0 и Xcode 8 код находится на Github, а для Swift 3 .2 и Xcode 9 — также на Github.
Русскоязычный неавторизованный конспект Лекции 10, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также Google Doc доступны на платной основе.