Лекция 18 CS193P Spring 2016 — Persistence (постоянное хранение данных).

screen-shot-2016-10-13-at-1-17-46-pm
Хотя название Лекции 18 — Persistence (постоянное хранение данных), оказалось, что это как раз то, о чем профессор не успел сказать. Однако не стоит об этом сожалеть, потому что эту тему можно посмотреть  «Лекция 16:  Фотокамера, Постоянное Хранение и Вставка Картинки в картинку (Camera, Persistence and Embed Segues)» более  раннего курса  «Developing iOS 8 Apps with Swift»   стэнфордского университета  CS193P зима 2015 года.  .
 А Лекция 18 получилась фантастически полезной, так как  это  продолжение большого демонстрационного приложения Trax, в котором на примере работы с картой ( MapKit ) демонстрируются различного рода segues: модальный segue, Popover segue, Unwind segue как на iPad, так и на iPhone. Но это только основные направления, помимо которых в решение усложняющейся задачи вовлекаются все новые механизмы iOS программирования:

  • «радиостанции» в текстовых полях,
  • усовершенствование работы с клавиатурой
  • “переезд” (segueing) от MKMapView
  • создание на карте перемещаемых  и редактируемых «булавок» (pins)
  •  Autolayout c «нечеткими» границами и его использование для расчета предпочтительного размера MVC
  • управление поведением адаптивной презентации на приборах горизонтального Compact Size Class (iPhones)
  • визуальные эффекты (типа, Blur — “затуманивание”)

Читать далее

Лекция 17 CS193P Spring 2016 — Segues, Core Location и MapKit.

Screen Shot 2015-12-27 at 2.26.54 PM

В Лекции 17 освещаются три основные темы:

  • Segues ( Modal, Unwind, Popover, Embed)
  • Core Location
  • MapKit

И в конце лекции начало большого демонстрационного примера, посвященного  картам и Segues, который продолжится на следующей Лекции 18.

Читать далее

Лекция 16 CS193P Spring 2016 — Notification и CloudKit.

Лекция 16 посвящена большому демонстрационному примеру на тему CloudKit. В самом начале Лекции делается очень короткое отступление для показа уведомлений Notifications, этих маленьких “радиостанций”.

В качестве демонстрационного примера создается приложение Pollster, которое позволяет вам с помощью CloudKit задавать вопросы с ответами и размещать все это в iCloud, чтобы люди могли отвечать на вопросы. Это дает возможность отслеживать сколько ответов получено на вопросы и т.д.

Начинается создание приложения с некоторого UI, который помогает нам задать вопрос и загрузить его в iCloud. Затем проектируется другой View Controller, который показывает список всех вопросов, находящихся в public базе данных, чтобы вы могли выбрать любой из них и добавить свой ответ. Пользовательский интерфейс приложения Pollster позволяет формировать новые вопросы и удалять старые, и все это происходит в iCloud. Для удобства работы пользователя выполняется подписка Subscription на вставку и удаление вопросов с Push Notifications (удаленными уведомлениями). Показано как распространить информацию, содержащуюся в  Push Notifications, которые обрабатываются в AppDelegate,  дальше, к тем View Controller, которые создавали определенные подписки Subscriptions и ожидают их результатов. Читать далее

Лекция 15 CS193P Spring 2016 — Application Lifecycle («жизненный цикл» приложения), Alerts и Cloud Kit.

screen-shot-2016-09-11-at-10-22-50-am
В Лекции 15 на сцену выходят в главной роли файл AppDelegate, который до сих пор Полом Хэгерти прятал во вспомогательную папку Supporting Files,  и CloudKit, этот реальный Mobile Backend as a Service (MBaaS) с авторизацией пользователей, с private  и public базами данных, структурированным хранением больших файлов и push уведомлениями. CloudKit — замечательный, очень простой, надежный  и практически бесплатный (до 1PB бесплатного public хранилища). Это прекрасная замена Parse, который недавно прекратил свое существование.

В результате в Лекции 15 освещаются три основные темы:

  • “Жизненный цикл” приложения (Notifications, AppDelegate, Info.plist, Capabilities)
  • Alerts и  Action Sheets
  • Cloud Kit

Читать далее

Лекция 13 CS193P Spring 2016 — NSTimer и анимация.

На Лекции 13 рассматривается одна маленькая тема -таймер NSTime, и одна большая — анимация.  
В начале Лекции 13 рассматривается очень простой маленький класс, NSTime, который позволяет вам вызывать метод либо периодически — снова и снова через определенный интервал, либо один раз когда-нибудь в будущем.Таймер создан на основе специальной iOS технологию Run loopsДля  main queue система автоматически устанавливает  для вас Run loops, так что на main queue NSTimer работает всегда.
Пол Хэгерти представляет демонстрационный пример, в котором использует  приложение FaceIt, и заставляет в нем «лицо» «моргать глазами» с помощью двух таймеров NSTime, перекрестно вызывающих друг друга, что выглядит менее «роботизированно», чем если бы использовался один повторяющийся таймер. По ходу дела он рассказывает что такое в Swift метод,  доступный Objective-C на этапе run time, потому что именно такой метод запускает NSTime. А также показывает, как создать Actions и Outlets в superclass.

Основная часть лекции посвящена анимации. Профессор делает небольшой обзор типов анимации, которые доступны в iOS, но фокусируется на анимации views (UIViews).

Читать далее

Лекция 12 CS193P Spring 2016 — Autolayout (Автоматическая разметка).

Screen Shot 2016-08-19 at 11.38.48 AM
Лекция 12 посвящена очень важной теме: механизму Autolayout (автоматическая разметка).
Вначале дается обзор того, что нам уже известно об Autolayout  к этому моменту времени, так как во всех предыдущих лекциях элементы Autolayout  уже были представлены в той или иной степени. Это направляющие голубые пунктирные линии, это использование CTRL-перетягивания, как способа # 1 для создания ограничений системы Autolayout, а также меню «Pin» и «Align«. В связи с тем, что начиная с iOS 8 используется новая концепция «Адаптивного интерфейса» и появилось понятие Size Class,  роль механизма Autolayout  сильно возросла и теперь в iOS без нее уже не обойтись.
Общую большую картину всех ваших ограничений вы можете получить в Document Outline (схеме UI), который является своеобразной «штаб-квартирой» системы Autolayout,  Именно здесь можно определить, какие ограничения действуют в определенном Size Class, можно разрешить конфликты между ограничениями, можно вести «охоту» за «магическими» числами.

Читать далее

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

Screen Shot 2016-08-09 at 9.02.43 PM

Лекция 11 посвящена демонстрационному примеру «Smashtag L11« с использование Core Data. Этот пример построен на основе приложения  «Smashtag L9«, которое по существу является клиентом Twitter, выбирающем твиты по специальной строке поиска, например, #stanford. Он демонстрирует все теоретические положения, представленные на Лекции 10.

Screen Shot 2016-08-09 at 7.48.48 PM

Задачей демонстрационного приложения  «Smashtag L11« является показ списка всех пользователей Twitter, кто твитил, например, со #stanford в своем тексте. Должны быть учтены не только твиты, полученные в результате последнего поиска  для строки #stanford, но и вообще все твиты, когда-либо связанные с поиском по строке  #stanford. Для этого используется база данных Core Data. Каждый раз при получении твитов «из сети» с помощью специального фреймворка Twitter c Лекции 9, они не только показываются на экране, но и записываются в Core Data.  Потом мы сможем запрашивать эти твиты и получать любую информацию, включая получение списка пользователей, которые твитили с текстом, содержащим, например, #stanford.

Подробно демонстрируются все этапы создания приложения с Core Data:

Читать далее

Лекция 10 CS193P Spring 2016 — Core Data (Объектно-ориентированная база данных).

Screen Shot 2016-08-02 at 6.46.32 AM

Лекция 10 целиком теоретическая и посвящена одной единственной теме — Core DataПо существу, это способ создания графа объектов, который проектируется на SQL или XML базу данных  или даже на базу данных в памяти. 

Создание базы данных начинается с построения визуальной схемы базы данных (Data Model) с помощью инструментов  Xcode. Это своего рода “мостик” между объектно-ориентированной “территорией” и “территорией” баз данных. Профессор демонстрирует это для простейшей задачи с двумя сущностями: Tweet и TwitterUser. Показано, как определяются Сущности, Атрибуты и Взаимосвязи.

На основе визуальной  схемы базы данных создаются subclasses  NSManagedObject: Tweet  и  TwitterUser, которые для пользователей Core Data открывают совсем другой объектно-ориентированный способ общения с объектами базы данных в коде с помощью «точечной нотации».

Для того, чтобы что-то делать с базой данных, необходим экземпляр NSManagedObjectContextРеально существует два способа получения его, и они практически эквивалентны.

Читать далее

Лекция 9 CS193P Spring 2016 — Table View (Табличное представление данных).

Вся Лекция 9 посвящена единственной и очень важной теме — визуальной таблице Table View, которая является  в iOS основным способом отображения и взаимодействия с большими наборами данных. Таблица Table View изначально настроена на отображение очень большого объема данных (сотни тысяч и более строк) и использует эффективный механизм формирования очереди повторно используемых ячеек (Dequeue Reusable Cell) и делегирование dataSource для загрузки динамических данных.

Первая часть Лекции 9 представляет целый спектр проблем, связанных как со структурой и составными частями Table View, так и с использованием подкачки данных в таблицу из интернета в многопоточной среде. В условиях, когда ячейки в таблице Table View «уходят» и «приходят» на экран, а также повторно используются в целях эффективности, законы «Мира многопоточности» проявляют себя в полную силу. Пол Хэгерти показывает две вещи, которые вы все должны учитывать в условиях многопоточности.

Читать далее

Лекция 8 CS193P Spring 2016 — Multithreading и Text Field (Многопоточность и текстовые поля)

Судя по названию, основными темами Лекции 8 являются:

  1. Многопоточность,
  2. Текстовые поля,

но очень значительная часть Лекции 8 посвящена усовершенствованию функциональных возможностей демонстрационного приложения Cassini по следующим направлениям :

  • использование множественного MVC Split View Controller в сочетании с парой   Navigation Controllers для обеспечения функционирования на iPhone и iPad
  • применение extension для расширения возможностей класса UIViewController
  • масштабирование изображения на Scroll View  c использованием методов делегата UIScrollViewDelegate
  • segue в коде
  • тонкости использования индикатора активности  (Activity Indicator) в виде маленького вращающегося «колесика» для визуализации занятости системы
  • повторное использование Detail в Split View
  • управление с помощью делегата UISplitViewController тем, что появляется, когда Split View показывается на экране впервые

В результате получился универсальный, подходящий на все случаи жизни, как в дальнейшем покажет практика, MVC для показа изображений по их URL —  ImageViewController. Огромный объем изображений NASA, задействованных в демонстрационного приложения Cassini , наглядно показывает необходимость использования многопоточности.
Читать далее