Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Pro Core Data for iOS. Глава №2. Теоретическая часть

Anna | 2.07.2014 | нет комментариев

Сегодня хочу начать свободный перевод книги Михаеля Привата и Роберта Варнера «Pro Core Data for iOS», которую можете скачать по этой ссылке. Всякая глава будет содержать теоретическую и подчасутилитарную часть.

image

Оглавление:

  • Глава №1. Приступаем (Фактическая часть)
  • Глава №2. Усваиваем Core Data
  • Глава №3. Хранение данных: SQLite и другие варианты
  • Глава №4. Создание модели данных
  • Глава №5. Трудимся с объектами данных
  • Глава №6. Обработка результатирующих множеств
  • Глава №7. Настройка продуктивности и применяемой памяти
  • Глава №8. Управление версиями и миграции
  • Глава №9. Управление таблицами с применением NSFetchedResultsController
  • Глава №10. Применение Core Data в продвинутых приложениях

Введение

Многие разработчики, позже первого знакомства с Core Data, считают его каким-то запутанным комплектом классов, тот, что взамен того, Дабы упрощать работу с данными, напротив, препятствует этому. Допустимо это Rails разработчики, привыкшие к написанию динамических способов поиска и разрешающие принятым соглашениям исполнять за них всё чумазую работу. Допустимо это Java разработчик, тот, что аннотирует Enterprise JavaBeans (EJB) и работает с Plain Old Java Objects (POJO). Кем бы ни были эти люди, чем бы они не занимались, они не воспринимают Core Data Framework таким какой он есть и его методы работы с данными, столько же разработчиков при виде того, как создаются «живые» интерфейсы с применением Interface Builder кривятся и ухмыляются. Мы уверяем Вас, что Core Data это не очередная машина Рубена Голдберга. Классы в Core Data Framework скорее игроки Бостон Селтикс 1980 года и, когда вы осознаете их подходы к игре, лишь тогда сумеете оценить всё прелесть и законченность их игры и взаимодействия.

Знаете ли Вы?

Рубен Люциус Голдберг (англ. Reuben Lucius Goldberg; 1883—1970) — заокеанский карикатурист, скульптор, писатель, инженер и изобретатель.
Голдберг больше каждого знаменит серией карикатур, в которых фигурирует так называемая «машина Руба Голдберга» — Исключительно трудное, массивное и запутанное устройство, исполняющее дюже примитивные функции (скажем, большая машина, занимающая целую комнату, цель которой — передвижение ложки с пищей от тарелки до рта человека).
В 1948 году Голдберг получил Пулитцеровскую премию за свои политические карикатуры, а в 1959 году — премию Banshees’ Silver Lady Award.
Голдберг был одним из основателей и первым президентом Национального социума карикатуры. Его именем названа премия Рубена, которой организация награждает карикатурист года. В США годично проходит конкурс машин Руба Голдберга.

image

В этой главе будут расписаны предназначения классов Core Data Framework, как по отдельности, так и при совместной их работе. Постарайтесь не торопиться прочитать главу целиком. Исследуйте примеры, покопайтесь с ними, вводите код сами (никакого копипаста!) и запускайте на проверку.

Классы Core Data

В первой главе мы теснее разглядели и сделали самое примитивное приложение применяя Core Data. Вы видели отрывки кода, какие классы были использованы, какие способы вызывались, в каком порядке этим самые способы вызывались и какие параметры этим способам передавались. Всё это для того делалось, Дабы осознать каким образом работает Core Data. Вы слепо следовали тому, что вам говорили делать, допустимо в некоторые моменты вы и недоумевали для чего это делается, но продолжали отстукивать на клавиатуре приторные NSManagedObject, допустимо вы задавали себе вопрос «А что будет, если сюда подставить другое значение?». Некоторые допустимо даже испробовали заменить одно значение на другое, именно они получили что-то хорошее от взрыва ;) , а кто-то получил то, что и рассчитывал получить.

Эдвард Дейкстра, знаменитый компьютерный изыскатель и владелец награды Тьюринга 1972 года за свою работу в области разработки языков программирования, говорил об элегантности, как о качестве, которое определяет победу либо поражение, а не как о необязательной роскоши.

Знаете ли Вы?

Премия Тьюринга (англ. Turing Award) — самая элитная премия в информатике, вручаемая Ассоциацией вычислительной техники за феноменальный научно-технический взнос в этой области.

Премия учреждена Ассоциацией вычислительной техники в честь выдающегося английского учёного Алана Тьюринга, получившего первые большие итоги касательно вычислимости задолго до возникновения первых электронных вычислительных машин.
Премия годично вручается одному либо нескольким экспертам в области информатики и вычислительной техники, чей взнос в этой области оказал мощное и продолжительное воздействие на компьютерное сообщество. Премия может быть присуждена одному человеку не больше одного раза. В сфере информационных спецтехнологий премия Тьюринга имеет ранг, подобный Нобелевской премии в академических науках. Впервой Премия Тьюринга была присуждена в 1966 году Алану Перлису за становление спецтехнологии создания компиляторов.

В реальное время премия спонсируется корпорациями Intel и Google и составляет 250 000 баксов США.

(с) Википедия

Core Data не только справляется с задачей хранения данных, но и делает это изящно. Дабы добиться этой элегантности у себя в кода, Вам нужно понимать Core Data, а не гадать на кофейной гуще о том, как оно работает и вообще отчего оно работает. Позже прочтения данной главы Вы в деталях осознаете не только саму конструкцию Core Data Framework, но и то, каким образом фрэймворк решает трудные задачи применяя маленький комплектом классов, делая решения примитивными, внятными и изящными. На протяжении главы мы будем строить и дополнять диаграмму классов Core Data Framework. От Вас не ускользнёт и тот факт, что не все классы будут принадлежать Core Data Framework, некоторые будут импортированы из Foundation Framework. Параллельно с теоретической частью мы будем разрабатывать маленькое приложение, которое будет трудиться с фальшивыми организационными конструкциями (администраторы, программисты, руководители, менеджеры и тд).

Откройте XCode и сделайте Single View Application:
image

Назовите план OrgChart.
Подключите в план Core Data (см. Глава №1). Запустите приложение и удостоверитесь, что оно не падает.
image

На изображении приведенном ниже отображены классы Core Data с которыми мы обыкновенно трудимся:
image

В нашем коде сохранение данных происходит путём добавления новых NSManagedObject вNSManagedObjectContext, а приобретение данных с поддержкой NSFetchRequest класса. Как было показано в Главе №1, среда управления объектами (managed object context) создается и инициализируется при помощи диспетчера хранилищ данных (persistent store coordinator), реализуемого классомNSPersistentStoreCoordinator, тот, что в свою очередь определяется моделью данных, реализуемой классомNSManagedObjectModel. Оставшаяся часть главы будет посвящена рассмотрению того, каким образом создаются эти классы, как они взаимодействуют между собой и, как их применять.

Применяющиеся при создании модели данных классы

Как было ранее упомянуто в Главе №1, все приложения использующие Core Data обязаны иметь объектную модель хранимых данных. Модель определяет сущности и их свойства. У сущности есть три типа свойств:

  • Признаки
  • Отношения
  • Свойства выборки

Таблица, которую вы видите ниже, показывает разные классы и изложение их роли.
Перебирать классы для лучшего понимая механизма инициализации модели довольно увлекательное занятие, но на практике создание модели в XCode требует от вас знания трудиться мышкой в графическом редакторе моделей, без написания цельной строчки кода.

Название класса Роль
NSManagedObjectModel Модель данных
NSEntityDescription Сущность в модели данных
NSPropertyDescription Абстрактное изложение свойства сущности
NSAttributeDescription Признак сущности
NSRelationshipDescription Ссылка одной сущности на иную
NSFetchedPropertyDescription Изложение подмножества экземпляров сущностей выбранным по определенному критерию

Таблица ниже показывает отношения между классами применяющимися при определении модели.NSManagedObjectContext не ссылается, либо ссылается на несколько объектов сущностейNSEntityDescription. Всякая объектная сущность NSEntityDescription не ссылается, либо ссылается на несколько объектов NSPropertyDescriptionNSPropertyDescription является абстрактным классом с тремя определенными реализациями:

  • NSAttributeDescription
  • NSRelationshipDescription
  • NSFetchedPropertyDescription

image

Этого маленького кол-ва классов будет довольно для того, Дабы описать всякую модель данных, которая будет вами разрабатываться с применением Core Data Framework. Как описывалось ранее в Главе №1, для создания модели нужно открыть XCode, предпочесть пункт меню File -> New -> New File и указать «Data Model». В этой сегменты мы сделаем модель, которая будет представлять собой организационную конструкцию компании.
Сделайте новую модель в XCode и назовите её OrgChart. В этой модели данных у организации есть директор (CEO). Для простоты предположим, что у человека есть два признака: неповторимый идентификатор служащего и имя. Сейчас мы готовы приступить к определению модели данных.
Откройте модель данных и сделайте новую сущность Organization. Как и человек, организация определяется своим уникальным идентификатором и именем. Добавьте два признака сущности Organization. Признаки представляют собой непрерывные свойства сущности, которые могут содержать значения некоторого типа. Типы данных признаков описываются в классе NSAttributeType и всякий тип данных налагает некоторые ограничения на сущность. Скажем, если вы испробуете записать строку в качество с целочисленным типом данных, то возникнет оплошность.
Таблица ниже описывает существующие типы:

Тип признака в XCode Тип признака в Objective-C Objective-C Изложение
Integer 16 NSInteger16AttributeType NSNumber 16-битное целое
Integer 32 NSInteger32AttributeType NSNumber 32-битное целое
Integer 64 NSInteger64AttributeType NSNumber 64-битное целое
Decimal NSDecimalAttributeType NSDecimalNumber Целочисленное значение по основанию 10
Double NSDoubleAttributeType NSNumber Объектная обёртка типа double
Float NSFloatAttributeType NSNumber Объектная обёртка типа float
String NSStringAttributeType NSString Строка символов
Boolean NSBooleanAttributeType BOOL Объектная обёртка логичного типа
Date NSDateAttributeType NSDate Дата и время
Binary data NSBinaryDataAttributeType NSData Двоичные данные
Transformable NSTransformableAttributeType Всякий нестандартный тип Всякий тип, тот, что может быть переведён в типовой

Примечание

В Главе №5 мы разберем тип Transformable подробнее. Transformable-аттрибуты это метод уведомить Core Data о том, что будут применять нетрадиционные типы данных и, в процессе сохранения данных в локальное хранилище, мы известим, каким образом преобразовать данный тип к одному из теснее существующих встроенных.

Назовём 1-й признак id, а 2-й name. По умолчанию при создании нового признака его тип механически устанавливается в Undefined и не дозволят плану быть скомпилированным. Ваша задача предпочесть подходящий тип для всякого из создаваемых вами признаков сущности. Идентификаторы организации неизменно будут целочисленного типа, следственно предпочтем Integer 16 в качестве типа для id признака. Тип String используем для признака name.
На данном этапе ваш план должен выглядеть дальнейшим образом:
image

Если бы на данном этапе программа была бы запущена, то объектный граф выглядел бы дальнейшим образом:
image

На графе видно, что модель данных NSManagedObjectModel ссылается на объект сущностиNSEntityDescription, тот, что именуется Organization и использует тип NSManagedObject для свойстваmanagedObjectClassName. У сущности есть два признака. Всякий признак содержит два свойства: имя и тип. В первом признаке имя id и тип NSInteger16AttributeType для свойств name и attributeType соответственно.

Таким же образом сделайте вторую сущность с именем Person и двумя признаками: id и name. Сейчас мы можем сделать связь между сущностями Organization и Person и назвать её leader. Сделать связь довольно легко: нажимаем на кнопку ” ” в разделе «Relationships», выбираем «Destination» и «Source». Сейчас добавим еще одну связь между Person и Person и назовём её employees. Последняя сделанная нами связь — это связь типа «один к одному», в то время, как у служащего могут быть несколько подчиненных, а значит и тип связи нужен «один ко многим».
Откройте панель справа в XCode, как это показано на рисунке:
image

И поставьте галочку наоборот пункта «Plural: To-Many Relationship»:
image

Модель данных выглядит дальнейшим образом:
image

Вот как будет выглядеть объектный граф, когда модель будет загружена:
image
Данный граф не является графом объектов,которые Core Data хранит, это каждого лишь отображение того, как выглядит модель в глазах Core Data.
Нормальный метод загрузки модели данных Core Data выглядит дальнейшим образом:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"OrgChart" withExtension:@"momd"];

_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

Познание того, каким образом представлены объекты модели в Core Data, в основном не дюже пригодное, разве что вы занимаетесь написанием собственного хранилища данных либо заинтересованы в генерировании модели данных программно на этапе выполнения. Параллель дозволено провести с созданием программно UIView, взамен того, Дабы применять готовые элементы предоставляемые Interface Builder’ом. Впрочем большое осознавание того, каким образом работает Core Data, дозволит вам предсказывать и чураться трудностей, задач, и приведёт к решению сложностей креативным и элегентным методом.

Мы ознакомились с тем, как представлены сущности в Core Data и какие вспомогательные классы в нём присутствуют, но вам не нужно будет залезать в заросли всякий раз, когда вы захотите применять Core Data в своём плане, редко когда вам прийдется применять перечисленные ранее классы напрямую. Все классы, которые мы обсудили выше, относятся к изложению модели данных. Остаток этой главы мы посвятим классам представляющим данные и свойствам, с поддержкой которых мы получим доступ к этим самым данным.

Продолжение следует…

Примечание: было решено опубликовать половину для того, Дабы у вас было время подумать, обмозговать и со свежей головой продолжить чтение завтра.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB