Лекция 11 CS193P Winter 2017 — Core Data Demo (Демонстрационное приложение).

Лекция 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-х вещах:

  1. реализация методов делегата NSFetchedResultsControllerDelegate, который «волшебным образом» обновляет таблицу Table View при изменениях в базе данных, влияющих на показ результатов в таблице;
  2. использование переменной 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 доступны на платной основе.