Лекция 13 CS193P Fall 2017 — Emoji Art Demo, Persistence (постоянное хранение) и Documents.

Лекция 13 состоит из двух неравных частей :

  • первая меньшая часть является продолжением демонстрационного примера Emoji Art в плане работы с текстовым полем UITextField при пополнении коллекции эмоджи Collection View,
  • вторая  часть — чисто теоретическая и посвящена очень важной теме — постоянному хранению (persistence) и работе с документами UIDocument

Продолжение демонстрационного примера Emoji Art и UITextField

Демонстрационный пример заключается в следующем: в приложении Emoji Art, полученном в прошлый раз, создается текстовое поле, которое появляется прямо в нашей небольшой коллекции эмоджи UICollectionView, и с помощью этого текстового поля вы сможете добавлять новые эмоджи в эту коллекцию.

На этой небольшой задаче профессор демонстрирует невероятную изобретательность, создавая в коллекции Collection View отдельную секцию 0, в которой присутствуют две переключающиеся ячейки: одна — с текстовым полем UITextField, а другая — с кнопкой «+» типа UIButton, вызывающей появление этого текстового поля. В другой секции 1 находится динамически меняющийся список эмоджи. С помощью методов UICollectionViewDataSource демонстрируется переключение ячеек в одной секции и отображение ячеек в другой секции, причем ячейки имеют различный размер. Но самое оригинальное и очень остроумное решение найдено для передачи информации с помощью замыканий из текстового поля  UITextField, в коллекцию Collection View. По ходу решается проблема прервания “циклических ссылок памяти” (memory cycle) как с помощью weak, так и с помощью unowned.

Постоянное хранение (Persistence)

Пол Хэгерти делает обзор 6-ти способов хранения данных:

  • UserDefaults — своего рода словарь Dictionary постоянного хранения. Только для очень маленького объема данных и только в формате Property List.
  • Архивирование (Archiving).
    • старый механизм с помощью NSСode (постоянно сохраняются storyboards)
    • новый механизм с помощью Codable (любые Модели в JSON и Property List и обратно), минимум кода при реализации
  • Файловая система iOS является файловой системой Unix в своей основе, но файлы можно читать и писать только в Sandbox (“песочнице”).
  • Core Data — очень эффективная и практически неограниченного объема SQL база данных с объектно-ориентированным API для взаимодействия с ней.
  • Cloud Kit — простая НЕ SQL «сетевая» база данных, работающая с iCloud Drive с помощью асинхронного API 
  • UIDocument — создание и сохранение информации в виде «документов» в различных контейнерах: файловая система iOS, iCloud Drive, Box и т.д. Прекрасно интегрируется с новым в iOS 11 приложением Files, предоставляет в распоряжение разработчика компонент  UIDocumentBrowserViewController, который обладает фантастическим API и заботится абсолютно обо всех операциях, которые вы хотите осуществлять с “документом”

Профессор рассказывает обо всех видах постоянного хранения с разной степенью подробности.
Он совсем не освещает старый способ архивирования с NSCode, но очень подробно представляет новую в iOS 11 систему архивирования с протоколом Codable.

Подробно рассказывает об очень легкой и ограниченной базе данных UserDefaults, предназначенной, в основном, для хранения установок (Settings) и предпочтений (Preferences).

Дает лишь краткий обзор супер эффективной и очень гибкой в плане запросов базы данных Core Data и исключительно «сетевой» базы данных Cloud Kit, отсылая для подробного изучения к аналогичным стэнфордским курсам CS193P из предыдущих семестров. Он объясняет это тем, что каждый семестр он будет посвящать целую неделю (2 Лекции) какому-то одному механизму постоянного хранения (Persistence), и каждый раз это будут разные механизмы.

Вы можете познакомиться с двумя Лекциями о Core Data на курсе CS193P Winter 2017 iOS 10 на русском языке на этом сайте:

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

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

Вы можете познакомиться с двумя Лекциями о Cloud Kit на курсе CS193P Spring 2016 iOS 9 на русском языке на этом сайте:

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

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

В этом семестре «звездой» механизма постоянного хранения является UIDocument и UIDocumentBrowserViewController, потому что в iOS 11 все сложилось в пользу создания приложений, основанных на документах, то есть Document based Apps

  • появление нового механизма архивирования c использование протокола Codable, требующего от вас минимального кода для преобразования практически любой Модели в данные типа Data
  • появление нового приложения Files, работающего напрямую с директорией Documents directory в вашем Sandbox (“песочнице”) и с другими контейнерами
  • появление многозадачного режима на iPad и возможность программировать действие механизма Drag&Drop, который существенно облегчает формирование новых «документов»
  • появление компонента UIDocumentBrowserViewController, который обладает фантастическим API и заботится абсолютно обо всех операциях, которые вы хотите осуществлять с “документом”, при это не требуя от вас почти никакой работы. Все, что вам нужно сделать, это создать документ, в котором ваша Модель конвертируется в данные Data и наоборот.

Поэтому оставшаяся часть Лекции 13 посвящена тому, как создать, открыть,  сохранить, закрыть UIDocument, какие состояния есть у UIDocument и как их отслеживать, как создать миниатюру thumbnail документа UIDocument и показать ее в браузере вместо иконки типа файла.

Следующая 14 Лекция продолжит тему UIDocument и будет посвящена UIDocumentBrowserViewController, прекрасному и очень мощному интерфейсу  в вашем собственном приложении для создания файлов, перемещения файлов, удаления файлов, размещения их в папках, перетаскивания файлов с iCloud Drive на локальный жесткий диск.

На Лекции 14 также будет представлен большой демонстрационный пример создания Emoji Art приложения с постоянным хранением в виде документа UIDocument, в котором используется Codable для создания JSON представления документа и хранения в файловой системе, и UIDocumentBrowserViewController для выбора/создания/переименования/перемещения Emoji Art документов.

Код демонстрационного примера для Лекции 13 находится на Github  для iOS 11  и на Github для iOS 12 в папке EmojiArt L13. Лекция 13 и слайды на английском языке находятся на  iTunes название “13. Emoji Art Demo, Persistence, and Documents .”
Русскоязычный неавторизованный конспект Лекции 13, хронометрированный через каждые 5 минут, и представленный в виде PDF-файла, который можно скачать и использовать offline, а также в формате Google Doc доступны на платной основе.

Лекция 13 CS193P Fall 2017 — Emoji Art Demo, Persistence (постоянное хранение) и Documents.: 5 комментариев

    • Вам посланы все необходимые приглашения.

  1. Татьяна, здравствуйте! Очень нужна ваша помощь
    Может сможете подсказать как твиттер врубить в симуляторе? В iOS после 10 вроде уже нет легкой такой поддержки твиттера и как в лекции 9 зимней серии показывает профессор ввод логина для твиттера уже не пройдет. Как пройти зимнюю лекцию 11 (демку CoreData) не понятно)

    • Для того, чтобы адаптировать демонстрационные примеры Smashtag (клиент Twitter), вам придется адаптировать приложение к фреймворку Twitter Kit, так как в iOS 11 фреймворк Social, который использует профессор, упразднен, это подробно описано в статье «Обновление демонстрационных примеров и решений Заданий курса CS193P Winter 2017 до Swift 4 и iOS 11» https://bestkora.com/IosDeveloper/obnovlenie-demonstratsionnyh-primerov-i-reshenij-zadanij-kursa-ios-10-swift-3-do-swift-4-i-ios-11/.
      Сама прошла через все это. И некоторые пользователи тоже, они внесли некоторые изменения, которые улучшили работу приложения.

      Будут вопросы с этим — пишите.

Обсуждение закрыто.