Stanford CS 193P iOS 7 Лекция 13 — Core Data и Table View ( + iOS 8 и iOS 9)

 Лекция 13  iOS 7 Objective-C начинается с детального обсуждения финального проекта, который должны разработать студенты Стэнфорда. Это обсуждение представляет интерес только для студентов Стэнфорда и по этой причине в моем конспекте отсутствует.

Затем совсем недолго ( буквально несколько слайдов) следует продолжение теоретической части о том, как Core Data соединяется с UITableView, потому что этот “брак заключен на небесах”. Core Data — это куча объектов, большой граф объектов, а Table Views — реально хороший инструмент для обхода графа объектов. Как нам добиться их взаимодействия? В iOS есть замечательный класс  с именем NSFetchedResultsController. Пол Хэгарти очень подробно рассказывает о тонкостях использования этого класса. В результате рождается класс с именем CoreDataTableViewController, который, с одной стороны реализует все методов UITableViewDataSource,  а с другой стороны — устанавливает себя делегатом для “отслеживания” изменений в Core Data.

Этот чрезвычайно полезный класс разработан Полом Хэгарти и предоставлен в распоряжение студентов для выполнения Домашней работы 6.

Далее показывается гигантский часовой демонстрационный пример «Photomani с использование Core Data и Table View. Это огромный демонстрационный пример. Он затрагивает много новых тем и приемов программирования.

Содержание демонстрационного примера

  • Получает последние (по времени) фотографии из Flickr.
  • Показывает список фотографов, которые сделали все эти фото.
  • Выбираем фотографа -> показывает список всех фотографий, которые сделал этот фотограф.
  • Сущности Core Data: Photographer  и Photo.

Используемые приемы

  • Графически в Xcode определяем схему нашей базы данных.
  • Создаем NSManagedObject subclasses  и затем добавляем к ним категории.
  • Используем эти категории для создания “factory” методов для создания  объектов базы данных.
  • Используем методы делегата Application Delegate (наконец-то)!
  • NSManagedObjectContext.
  • Background fetch (выборка в фоновом режиме) при реализации мультизадачного режима в iOS 7 (iOS 8)
  • Background URL Session.
  • Посылка и “прослушивание” уведомлений ( с помощью механизма NSNotification) на примере получения managedObjectContext  View Controller.
  • Использование CoreDataTableViewController для “подвязки” таблицы к базе данных.

Приложение «Photomania» создается «с нуля». На этой лекции  создается только главная Table View — таблица фотографов, но используется совсем другая стратегия, чем та, что мы видели в приложении Shutterbug. В приложении Photomania в фоновом режиме (in the background) постоянно запрашивается Flickr о все большем и большем количестве последних фотографий, которые забрасываются в базу данных Core Data. Между тем, в приложении есть  Table View, которая отслеживает появление этих данных. То есть данные в таблице фотографов будет автоматически и постоянно обновляться. Возникает много вопросов. Как построить базу данных Core Data? Как “подвязать” Table View к FetchedResultsController? Как сделать выборку данных в фоновом режиме? На все эти вопросы отвечает демонстрационный пример, который начинается на лекции 13 и продолжается на Лекции 14 (в работе).
Часть Лекции 14, касающаяся некоторых нюансов кода демонстрационного примера «Photomania«, представленного на Лекции 13, приведена в неавторизованном конспекте Лекции 13.

Код для Демонстрационного примера «Photomania_iOS9» для iOS 9 с комментариями на русском  языке  доступен на  здесь.

 Появление специальной  iOS 9 версии связано с тем, что привычный нам метод

Screen Shot 2015-11-11 at 1.07.36 PM

в iOS 9 упразднен и заменен на другой

Screen Shot 2015-11-11 at 1.11.20 PM

 

 Саму лекцию, а также ее слайды на английском языке можно получить через iTunes с названием “13. Core Data and Table View”.

Русский неавторизованный конспект лекции 13 и часть лекции 14, хронометрированные через каждые 5 минут, представлены в PDF — файле.

Лекция 13 CS193P Fall 2013 -Winter 2014.pdf

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *