Лекция 11 посвящена демонстрационному примеру «L11 Smashtag« с использованием Core Data. Этот пример построен на основе приложения «L9 Smashtag«, которое по существу является клиентом Twitter, выбирающем твиты по специальной строке поиска типа #stanford. Он демонстрирует все теоретические положения Core Data, представленные на Лекции 10.
Задачей демонстрационного приложения «L11 Smashtag« является показ списка всех пользователей Twitter, у которого есть твиты, содержащие в тексте поисковую строку, например, #stanford . Должны быть учтены не только твиты, полученные из Twitter в результате последнего поиска для строки #stanford, но и вообще все твиты, когда-либо связанные с поиском по строке #stanford. Для этого используется база данных Core Data. Каждый раз при получении твитов «из сети» с помощью специального фреймворка Twitter c Лекции 9, они не только показываются на экране, но и записываются в Core Data. Потом мы сможем запрашивать эти твиты и получать любую информацию, включая получение списка пользователей, которые имели твиты с текстом, содержащим, например, #stanford.
Подробно демонстрируются все этапы создания приложения с Core Data:
- Графическое построение в Xcode Модели Данных (или схемы базы данных) для двух Сущностей Tweet и TwitterUser c Атрибутами и Взаимосвязями типа «To One» и «To Many«.
- Получение контекста NSManagedObjectContext для работы с базой данных с помощью новой в iOS 10 концепции контейнера NSPersistentContainer, способного обеспечить работу Core Data как на фоновом (background) потоке, так и на главном main thread.
- Автоматическое («за кулисами») создание в Xcode расширений extension для NSManagedObject subclasses для Сущностей Tweet и TwitterUser.
- Заполнение данными взаимосвязанных Сущностей.
- Выборка и отображение данных из Core Data в таблице Table View с помощью NSFetchResultsController, который стал Generic в iOS 10.
- Формирование запросов, содержащих обращение как непосредственно к Атрибутам Сущности, так и к ее Взаимосвязям.
Все операции с базой данных выполняются в предположении, что вы работаете в многопоточной среде и некоторые операции могут «выбрасывать» (throws) ошибки. «Асинхронность» выполнения операций с базой данных поставлена во главу этого демонстрационного приложения. Показаны некоторые «парадоксы» этой асинхронности.
Акцентируется внимание на том, что если вы работаете с одной стороной Взаимосвязи, другая сторона Взаимосвязи синхронизируется автоматически, и это совершенно замечательная способность Core Data. Вам никогда не надо беспокоиться об целостности базы данных, Core Data управляет целостностью в любой момент времени вместо вас.
В конце Лекции 11 очень подробно обсуждается технология использования NSFetchResultsController, работа которого фундаментально строится на 2-х вещах:
- реализация методов делегата NSFetchedResultsControllerDelegate, который «волшебным образом» обновляет таблицу Table View при изменениях в базе данных, влияющих на показ результатов в таблице;
- использование переменной var с именем fetchedResultsController, у которой Generic тип наподобие NSFetchedResultsController<TweeterUser>, в ответах на вопросы протокола UITableViewDataSource.
Профессор Хэгерти предоставляет в ваше распоряжение два куска кода для облегчения работы с NSFetchedResultsController, и вам придется напечатать совсем чуть-чуть в вашем классе, чтобы сделать его работоспособным.
Лекции и слайды на английском языке представлены в iTunes название “11.Core Data Demo”. Код демонстрационного примера «L11 Smashtag» доступен как на iTunes название “Lecture 11 Demo Code: Smashtag«, так и на Github.
Русскоязычный неавторизованный конспект Лекции 11, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также Google Doc доступны на платной основе.