Если вы разработчик iOS и используете Core Data в своем приложении, будь то n00b или эксперт, вы должны использовать Mogenerator . Я имею в виду, действительно, вы * должны * использовать это. Если вы этого не сделаете, не волнуйтесь, я не только расскажу вам, зачем вам это нужно, но и включу учебник по его использованию!
Итак, давайте к этому!
Я уже знаю основные данные, так зачем мне Mogen?
Базовые данные — огромное чудовище. Здесь так много информации, и вы не получите никаких новых функций от Mogen. Однако вы * получите * базовые данные, которые будут намного, намного проще в использовании. Вот что Mogen делает для вас:
- Быстрее и проще генерация конкретных классов для вашей модели.
- Правильное двухклассное лечение в этом поколении.
- Избавляет от необходимости оборачивать числовые атрибуты в объектах NSNumber.
- Удобные методы установки для манипулирования множествами легко.
- Удобные методы обертки для вставки / идентификации объекта.
Я не могу дождаться, чтобы разобраться во всем этом, но сначала вам нужно установить Mogen и настроить свой проект!
Установка
Первое, что вам нужно сделать, это установить Mogen. Все просто, вы устанавливаете Mogen из DMG . После этого одноразового шага мы сейчас настроим ваш проект для его использования:
- В вашем проекте откройте свойства вашего проекта и нажмите «Добавить цель».
- Добавьте цель «Совокупность» (вы найдете ее в другой группе). Хит Next.
- Назовите цель как хотите. Я назову мой Могенератор . Хит Готово.
- Теперь выберите новую цель, которую вы только что создали, и нажмите «Add Build Phase», затем «Add Run Script».
- Откройте только что появившуюся группу «Выполнить сценарий» и введите информацию, как вы видите ее ниже, подгоняя имена под свой собственный проект. Не стесняйтесь изменять его в соответствии со своими потребностями, возможно, для создания файлов модели в подкаталоге.
Поздравляем, ваш проект настроен на использование 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/