Статьи

Начало работы с Mogenerator

Если вы разработчик iOS и используете Core Data в своем приложении, будь то n00b или эксперт, вы должны использовать Mogenerator . Я имею в виду, действительно, вы * должны * использовать это. Если вы этого не сделаете, не волнуйтесь, я не только расскажу вам, зачем вам это нужно, но и включу учебник по его использованию!

Итак, давайте к этому!

Я уже знаю основные данные, так зачем мне Mogen?

Базовые данные — огромное чудовище. Здесь так много информации, и вы не получите никаких новых функций от Mogen. Однако вы * получите * базовые данные, которые будут намного, намного проще в использовании. Вот что Mogen делает для вас:

  1. Быстрее и проще генерация конкретных классов для вашей модели.
  2. Правильное двухклассное лечение в этом поколении.
  3. Избавляет от необходимости оборачивать числовые атрибуты в объектах NSNumber.
  4. Удобные методы установки для манипулирования множествами легко.
  5. Удобные методы обертки для вставки / идентификации объекта.

Я не могу дождаться, чтобы разобраться во всем этом, но сначала вам нужно установить Mogen и настроить свой проект!

Установка

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

  1. В вашем проекте откройте свойства вашего проекта и нажмите «Добавить цель».

  2. Добавьте цель «Совокупность» (вы найдете ее в другой группе). Хит Next.
  3. Назовите цель как хотите. Я назову мой Могенератор . Хит Готово.
  4. Теперь выберите новую цель, которую вы только что создали, и нажмите «Add Build Phase», затем «Add Run Script».
  5. Откройте только что появившуюся группу «Выполнить сценарий» и введите информацию, как вы видите ее ниже, подгоняя имена под свой собственный проект. Не стесняйтесь изменять его в соответствии со своими потребностями, возможно, для создания файлов модели в подкаталоге.

Поздравляем, ваш проект настроен на использование Mogen! Есть еще одна вещь, которую вам нужно знать: когда вы создаете сущности в своей модели данных, обязательно заполните поле «Класс» тем же именем, что и сущность. (На самом деле вы можете назвать это как хотите, но это было бы глупо.)

Мы все готовы к работе. Что мы выиграли ?? Я обрисую это в следующем.

Быстрее, улучшенная генерация классов

Я программирую приложения для iPhone уже почти 3 года и, честно говоря, я до сих пор не могу сказать вам точные шаги для генерации классов Core Data. Кажется, это включает в себя выбор правильных объектов в модели, добавление нового файла и изменение некоторых флажков — смотрите, я не знаю. Я думаю, что в последнее время они сделали это немного легче, но это было сумасшествие, и сейчас я использую Mogen, так что мне уже все равно. ;-)Все, что я знаю, теперь намного проще.

Измените вашу цель сборки на «Mogenerator» (или как вы ее называли) и нажмите ⌘B, чтобы построить. И вы сделали. На этом этапе, поскольку вы создали новые файлы, вам необходимо добавить их в свой проект. Вам не придется делать это в будущих регенерациях, но для новых сущностей, да.

Вы заметите, что есть два набора файлов: _Event. * И Event. *. Если вы не знакомы с этим шаблоном, это удивительно . Это также использовалось в течение многих лет и позор Apple, что они не делают это из коробки. Файлы _Event. * Генерируются, и вы никогда не должны их трогать . Файлы Event. * Генерируются, только если они не существуют, и вы можете свободно добавлять любые методы и свойства, которые вам нравятся.

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

С этого момента, всякий раз, когда вы меняете свою модель, обновляйте классы, промывайте и повторяйте.

Лучшие сеттеры

Может быть, я один, но одна из ошибок, которые я совершал снова и снова, заключалась в том, чтобы забыть, что мои числовые атрибуты сущности обернуты в NSNumber. Я бы постоянно писал такой код:

if (user.isAdmin) { ... }

НЕПРАВИЛЬНО! Атрибут isAdmin является NSNumber, поэтому он будет иметь значение true для всех случаев, когда isAdmin не равен nil! Я сталкивался с этим так много раз, что даже подумывал о том, чтобы удалить Основные данные, чтобы стереть эмоциональную боль.

Больше не с Mogen. Теперь вы можете написать код как:

if (user.isAdminValue) { ... }

Это простое обновление — находка! Установка атрибутов одинаково проста, и вы можете сохранить исходные установщики и получатели для загрузки. Вы можете использовать все, что полезно на данный момент. С некоторыми атрибутами я буду использовать обе версии:

Спасибо, спасибо, Моген!

Еще более полезные методы

Помимо сеттеров и геттеров, у вас также есть несколько полезных методов для отношений. Теперь, я думаю, Apple извлекла урок и теперь предлагает подобные методы, но слишком мало, слишком поздно. Итак, скажем, например, у вас есть сущности с именами User и Role с отношением ко-многим в именованных ролях User . Вы можете написать код, подобный этому, чтобы добавить роль пользователю:

User *user = [User insertInManagedObjectContext:moc];
user.name = @"John Blanco";
 
Role *role = [Role insertInManagedObjectContext:moc];
role.type = @"Administrator";
 
[user addRolesObject:role];

И вы сделали. Не нужно создавать изменяемый набор или что-то еще, все это обрабатывается для вас. Есть несколько других методов, подобных этому, один, который позволяет вам удалить объект, и еще два, которые позволяют вам добавлять или удалять несколько объектов в наборе.

Проверки тоже!

Имейте в виду, это не вещь Mogen. Это базовые данные. Проверки позволяют вам проверить ваши данные перед сохранением в вашем постоянном хранилище. Но вы, возможно, даже не знали, что это существовало! Это потому, что вы должны указать свои проверки в конкретном классе и, если вы не используете Mogen, вам придется переписывать их каждый раз, когда вы обновляете свои классы. ЧТО?!

Теперь вы можете указать валидации следующим образом:

- (BOOL)validateEmail:(id *)value error:(NSError **)error {
    if (self.email && ![self.email isValidEmailAddress] && error) {
        *error = [NSError errorWithDomain:@"MyErrorDomain" code:1];
        return NO;
    }
 
    return YES;
}

Это то, как вы проверяете отдельные атрибуты, но есть и другие доступные хуки. Узнайте больше о проверке основных данных, чтобы использовать еще больше возможностей.

Вывод

Я надеюсь, что сделал мой случай для Mogenerator. Это бесценный инструмент! Это все упрощает, и с тех пор как я узнал об этом, я не работал над проектом без него. Более того, поскольку это инструмент, а не библиотека, он прекрасно взаимодействует с другими библиотеками Core Data, такими как Innerband Core Data Store и Magical Record .

А теперь иди, молодой солдат!

Источник:  http://raptureinvenice.com/getting-started-with-mogenerator/