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.

Читать далее

Замыкания вместо делегирования в iOS 8 Swift

Screen Shot 2015-05-26 at 10.19.34 AM

При проектировании iOS приложений со многими MVC приходится решать вопросы передачи информации от одного MVC к другому MVC как в прямом, так и в обратном направлении. Передача информации в прямом направлении при переходе от одного MVC к последующему , осуществляется обычно установкой Mодели того MVC, куда мы переходим, а вот передача информации «назад» из текущего MVC в предшествующий MVC, осуществляется с помощью делегирования как в Objective-C, так и в Swift.
Кроме того, делегирование используется внутри одного MVC между View и Controller для их “слепого взаимодействия” .
Screen Shot 2015-05-25 at 9.44.52 PM
Читать далее

Stanford CS 193P iOS 7 Лекция 12 — Documents и Core Data

 Лекция 12 целиком теоретическая и посвящена Core Data.

Начинается с создания Data Model для простейшей задачи с двумя сущностями: Photo и Photographer. Определяются их атрибуты и взаимосвязи. На основе визуальной карты базы данных создаются классы для ManagedObjects: Photo  и Photographer, которые функционируют в контексте ManagedObjectsContext.

Задача получения текущего контекста ManagedObjectsContext решается не традиционным способом через шаблон Core Data ( при создании проекта поставить «галочку»), который выдает кучу кода в AppDelegate.swift, большая часть которого посвящена созданию стэка Core Data, а через UIManagedDocument, который берет на себя все проблемы с созданием стэка Core Data, в том числе ManagedObjectsContext, с безопасностью многопотоковой обработки и т.д. Кроме того, это самый короткий способ перехода к  iCloud.

Рассматривается способ синхронизации множества контекстов ManagedObjectsContexts, указывающих на одну и ту же базу данных, через Notifications.

Создание  subclasses ManagedObjects с помощью Xcode на основе визуальной карты базы данных и использование «точечной нотации» доступа к свойствам, а также наполнение этих  subclasses пользовательскими (custom) методами  через механизм «категорий» ( categories)

Вставка  ManagedObjects, изменение атрибутов, удаление и запросы.

«Дескрипторы сортировки», «маленький язык» предикатов, составные предикаты, использование агрегатных функций KVC (Key Value Coding).

Выполнение запросов и результаты выборки. Faulting.

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

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

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

Stanford CS 193P iOS 7 Лекция 11 — UITableView и iPad (UISplitViewController, Popover)

Screen Shot 2015-02-17 at 11.19.32 PM

 Лекция 11 начинается с введения в TableView, ее стилей и элементов, с того, как заполняются ее ячейки путем «закачки» данных ( data sources), как пользователь может взаимодействовать с этой таблицей с помощью делегатов ( delegate ). Рассматриваются  replace и push segues, а также table spinners для refresh control.

Вторая теоретическая часть посвящена созданию универсальных (universal) приложений с добавлением отдельной storyboard и функциональности для iPad, а также специфических для iPad Сontrollers таких, как UISpliViewController и Popovers.

Практическая часть лекции демонстрирует как строится универсальное приложение с использованием  TableViewController и NavigationСontroller для iPhone и с использованием TableViewController и UISplitViewController для iPad. Хотя методы делегата UISplitViewController считаются самыми трудоемкими и обременительными во всем iOS, профессор нашел хитроумный способ как сделать их легкими и понятными. Универсальное приложение связано с просмотром фотографий с Flickr. Поэтому в конце лекции профессор Пол Хэгарти показывает другой способ получения данных с сервера Flickr путем создания собственной очереди и возвращения в main queue при работе с UI, используя  GCD или Grand Central Dispatch. Это более изящный способ, чем URL session, обсуждаемая в предыдущих лекциях.

Код для демонстрационного примера Shutterbug этой лекции доступен  здесь

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

Русский неавторизованный конспект лекции 11 представлен в PDF файлах:

Лекция 11 CS193P Fall 2013 -Winter 2014 1.pdf (0 - 10 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 2.pdf ( 10 - 20 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 3.pdf ( 20 - 30 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 4.pdf ( 30 - 40 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 5.pdf ( 40 - 60 минута)

Лекция 11 CS193P Fall 2013 -Winter 2014 6.pdf ( 60 минута - конец)

Stanford CS 193P iOS 7 Лекция 10 — Блоки, Многопоточность, Scroll View

Лекция 10 начинается с введение в многопоточность, при этом уделяется  особое внимание тому, как блоки ставятся в очередь (которые затем выполняются на разных потоках) и как запустить длительные по времени задачи без блокировки пользовательского интерфейса  ( UI ) . iOS поддерживает различные APIs – если предыдущие версии этого курса делали акцент на API низкого C уровня, то в этом году появилось Objective-C API и последний в данном курсе предпочтителен.

Вторая часть теории посвящается Scroll Views, как их создать, как добиться скроллинга и zooming (изменения масштаба).

Оставшаяся часть лекции посвящена демонстрационному примеру, который покрывает обе теоретические части: многопоточность и  Scroll Views.

Код демонстрационного примера  «Imaginarium» для этой лекции можно найти на сайте здесь.

Лекция и слайда (английский язык) доступна на  iTunes название “10. Multithreading, Scroll View”.

Русский неавторизованный  конспект Лекции 10, хронометрированный через каждые 5 минут, доступен на

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

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

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

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

Stanford CS 193P iOS 7 Лекция 9 – Анимация и Autolayout (авторазметка)

Лекция 9 начинается с продолжения демонстрации «Dropit» приложения — игры наподобие «Тетрис». Эта демонстрация была начата на прошлой лекции.

Оставшаяся часть лекции посвящена механизму Авторазметки (Autolayout) пользовательского интерфейса и различным способам определения «ограничений» (constraints). Возможности «очень сообразительной» системы Авторазметки показаны в короткой демонстрации  «Attributor Stats».

Код  этой лекции для «DropIt Attach» и «Attributor Stats» доступен  здесь.

Лекция и слайды на английском языке можно получить на iTunes название “9. Animation and Autolayout”.

Русский неавторизованный  конспект Лекции 9, хронометрированный через каждые 5 минут, доступен на

Лекция 9 CS193P Fall 2013 -Winter 2014 1.pdf (0 - 30 минута)

Лекция 9 CS193P Fall 2013 -Winter 2014 2.pdf (30 - 50 минута)

Лекция 9 CS193P Fall 2013 -Winter 2014 3.pdf (50 - конец)

Stanford CS 193P iOS 7 Лекция 8 – Протоколы, Блоки и Анимация

Screen Shot 2015-02-17 at 11.32.48 PMЛекция 8 начинается с очень большой теоретической части.

Протоколы — это способ взаимодействия между не взаимносвязанными проектами, в iOS в основном используются для делегирования функционала (delegates) и «подкачки данных»  (data sources). Протоколы декларируют, какие свойства и методы могут и должны существовать в другом классе, чтобы быть доступны декларирующему протоколы классу.

Блоки (blocks) инкапсулируют куски кода, которые могут передаваться как объекты. Специальное внимание следует уделять коду внутри блоков, который нуждается в доступе к переменным и объектам за пределами блока.

Анимация views может быть выполнена путем анимации их свойств напрямую или  – новое в iOS 7 – на основе «физики» объектов. Если анимируются свойства view, вам необходимо указать время анимации и конечное состояние свойств объекта. Для динамической анимации вы определяете «физические свойства» view и действующие на него силы, возможно, со стороны других views.

Конец лекции — это демонстрация, объясняющая динамическую анимацию более детально на примере игры типа «Тетрис».

Код приложения Dropit для этой лекции доступен  здесь.

Сама лекция, а также слайды на английском языке доступны через iTunes called “8. Protocols, Blocks, and Animation”.

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

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

Stanford CS 193P iOS 7 Лекция 7 – Views и жесты

Теоретическая часть Лекции 7 описывает как можно рисовать внутри views с помощью кода и как использовать различные жесты, воспринимаемые этими views. В конце лекции представлена большая и основательная демонстрация «Super Card», показывающая использование всех теоретических приемов рисования и управления жестами.

Код лекции доступен здесь.

Лекция 7 вместе со слайдами на английском языке доступна на  iTunes название “7.Views and Gestures”.

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

Лекция 7 CS193P Fall 2013-2014 All.pdf

Можно скачивать по частям:

Лекция 7 CS193P Fall 2013-2014 1.pdf

Лекция 7 CS193P Fall 2013-2014 2.pdf

Лекция 7 CS193P Fall 2013-2014 3.pdf

Лекция 7 CS193P Fall 2013-2014 4.pdf

Stanford CS 193P iOS 7 Лекция 6 – Полиморфизм Controllers и множественные MVCs в приложении, UINavigation, UITabBar

Лекция 6 начинается с короткой демонстрации того, как создавать абстрактные классы ViewController и использовать их для построения subclasses для конкретных карт (например, для игральных карт PlayingCardGameViewController.h, PlayingCardGameViewController.m).

Теоретическая часть лекции посвящена совместной работе множества MVCs на основе NavigationControlles и segues, возможности которых показываются в другой демонстрации.

Лекция заканчивается объяснением работы TabBarControllers.

Код для этой лекции представлен  для Attributor  здесь, а для Matchismo в Github.

Также коды демонстрационных примеров можно найти на сайте Stanford.

Лекция 6 вместе со слайдами на английском языке доступна на  iTunes название “6. Views and Gestures”.

Русский неавторизованный  конспект Лекции 6, хронометрированный через каждые 5 минут, доступен на

Лекция 6 CS193P Fall 2013-2014 1.pdf (0 -20 минута)

Лекция 6 CS193P Fall 2013-2014 2.pdf (20 - 30 минута)

Лекция 6 CS193P Fall 2013-2014 3.pdf (30 - 50 минута)

Лекция 6 CS193P Fall 2013-2014 4.pdf (50 -70 минута)

Stanford CS 193P iOS 7 Лекция 5 – «Жизненный цикл» View Controller

Лекция 5 начинается с описания работы элемента пользовательского интерфейса TextView и – что является новым в  iOS 7 – NSTextStorage и TextKit, затем следует короткое demo.

«Жизненный цикл» View Controller состоит из следующих шагов:

  • Создается экземпляр (gets instantiated) View  в 99% случаев из storyboard
  • Вызывается метод awakeFromNib, который можно было бы сравнить  init
  • Устанавливаются  outlets
  • Вызывается метод viewDidLoad , который может использоваться для основных установок (setups)
  • Определяется геометрия
  • Вызываются viewWillLayoutSubviews и viewDidLayoutSubviews
  • Вызываются viewWillAppear и viewDidAppear
  • Вызываются viewWillLayoutSubviews и viewDidLayoutSubviews
  • Вызываются viewWillDisappear и viewDidDisappear
  • Если «памяти» становится мало, то вызывается didReceiveMemoryWarning


Метод viewDidLoad используется в коротком demo, которое углубляет наши знания о строках с атрибутами NSAttributedString и NSMutableAttributedString.

Использование уведомлений  NSNotification возможно при включении и настройке определенных “радиостанций” на конкретные события. Если эти события происходят, то срабатывают заданные вами actions . Не забудьте “выключить радиостанцию”, когда она не нужна …

… все это показано в другом demo в конце лекции.

Код для demo этой лекции доступен  здесь.

Лекция 5 вместе со слайдами на английском языке доступна на iTunes название “5. View Controller Lifecycle”.

Русский неавторизованный  конспект Лекции 5, хронометрированный через каждые 5 минут, доступен на

Лекция 5 CS193P Fall 2013-2014 1.pdf

Лекция 5 CS193P Fall 2013-2014 2.pdf