Лекция 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 доступны на платной основе.
Оплатил 3-ю часть, жду ответа.
Вам посланы все необходимые приглашения.
Спасибо, получил.
Татьяна, здравствуйте! Очень нужна ваша помощь
Может сможете подсказать как твиттер врубить в симуляторе? В 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/.
Сама прошла через все это. И некоторые пользователи тоже, они внесли некоторые изменения, которые улучшили работу приложения.
Будут вопросы с этим — пишите.