Xcode4 автоматическая генерация объявлений @property и все, что с этим связано

#xcode #code-generation #properties #xcode4

#xcode #генерация кода #свойства #xcode4

Вопрос:

Когда я использовал Xcode 3, я настроил его с помощью скрипта perl, который я нашел в Интернете, который позволил мне автоматически генерировать код @property, @synthesize и освобождать код для новых переменных экземпляра. Однако в Xcode 4 нет такого меню пользовательских скриптов.

Есть ли способ подключить такого рода пользовательские скрипты для Xcode 4 или в Xcode 4 есть новая функция, которая генерирует все это автоматически? (Я посмотрел и не могу найти ни одного).

Я не говорю о ссылках на IBOutlets. Я знаю, что я могу перетащить из xib, и это создаст все нужные материалы для IBOutlets, но я ищу что-то, что создаст @property, @synthesize и освободит код для любой переменной экземпляра.

Спасибо, Кенни

Комментарии:

1. У меня нет решения для вас, но я слышал, что предполагается, что меню services может быть способом получить такого рода сценарии в Xcode 4. Для смелых: кажется, есть некоторые (недокументированные?) интерфейсы плагинов для Xcode…

Ответ №1:

Я бы настоятельно (и я не могу подчеркнуть это достаточно) предложил приложение:

Средство для создания аксессуаров

Это, безусловно, самое полезное приложение для написания кода на objective-C и objective-C 2.0, которое я нашел. Изначально написанный до ObjC2.0, он создал для вас средства получения и настройки ivar. С годами это просто продолжает развиваться. Теперь он выполняет свойства, классы контейнеров, кодирование значений ключа, KVO.

Это соответствует вашему стилю: на какую строку вы ставите скобки, как вы делаете отступ, как вы комментируете? Он также устанавливается как сервис, поэтому вы можете вызвать его из XCode, скопировать в буфер обмена и вставить обратно в XCode.

Я не автор, я ничего не получаю за подключение этого. Тем не менее, я представил его использование каждой команде Mac, над которой я работал, и перевел на него каждого программиста Obj-C при первом использовании.

У этого есть демонстрационный период. Определенно, по крайней мере, попробуйте это и посмотрите, решит ли это вашу проблему.

Комментарии:

1. Это кажется ~ приемлемым ~ способом сделать это, но за 10 долларов я бы ожидал чего-то гораздо более волшебного. Ранее я использовал perl applescript, найденный по адресу cocoawithlove.com/2008/12/instance-variable-to-synthesized.html Это тот уровень автоматизации, который я ищу. Мне не нужно набирать массивную комбинацию клавиш, затем перемещаться, затем комбинировать клавиши, затем перемещаться, затем комбинировать клавиши. Сценарий perl состоял всего из одной комбинации клавиш, и ВСЕ выполнялось автоматически. :/ Я проголосую за вас, но это не тот ответ, который я ищу. : (

2. Не так аккуратно, как опция сценария Мэтта Галлахера в xCode 3, но использование Accessorizer с xCode 4, похоже, справляется с этой задачей за меня, я бы рекомендовал взглянуть на нее. Просто хотелось бы, чтобы вам не приходилось прыгать в файл реализации, чтобы выполнять вставки.

Ответ №2:

Мне удалось заставить упомянутый выше perl-скрипт Xcode 3 работать под управлением Xcode 4 в качестве поведения.

Я разместил это на github. https://bitly.com/HXHiij

Надеюсь, это поможет.

Ответ №3:

Я еще не тестировал ни одно из них, но оба утверждают, что поддерживают Xcode 4:

  1. https://github.com/CraigWilliams/property_synthesize_dealloc
  2. https://public.me.com/dhoerl (Перейдите к Xcode/PropertyMaster)

Комментарии:

1. Я уже пробовал эти решения на основе сервисов раньше, но безуспешно, но я попробую еще раз и дам вам знать.

Ответ №4:

Мне также не хватает скриптов, связанных со свойствами, но я нашел обходной путь. Как отмечалось в другом месте, XCode 4 автоматически сгенерирует код свойства / синтезирует / освобождает код для IBOutlets, подключенных через IB.

Итак, у меня есть фиктивный XIB в моем проекте под названием Property_Hack.XIB с некоторыми UILabels, и всякий раз, когда мне нужно новое свойство для класса, я захожу в Property_Hack, меняю владельца и «подключаю» метку к файлу. Все, что вам нужно сделать, это ввести имя нужного ivar, и XCode добавит оператор @property в файл .h, а в .m добавит код @synthesize и освобождения. Затем я изменяю .h (удаляю ключевое слово IBOutlet и меняю UILabel на нужный вам тип данных).

Довольно халтурно и далеко от совершенства, но это все равно экономит время по сравнению с ручной модификацией обоих файлов. Поскольку NSIntegers и BOOLs не нуждаются в коде освобождения и присваиваются вместо сохранения, я обычно настраиваю их вручную, вместо того чтобы использовать этот подход. Следует ли копировать или сохранять NSStrings — это аргумент, который я не буду здесь перефразировать 🙂

Комментарии:

1. Сильно ограниченный и запутанный способ получения чего-либо, кроме элементов пользовательского интерфейса, на самом деле не является решением. В каждой современной IDE в мире есть способ автоматической генерации ваших методов получения и настройки.

2. Я не могу не согласиться, Кенни, я думаю, что это серьезная оплошность, которая заставляет меня стиснуть зубы. Однако для любой серьезной разработки приложений все, что ускоряет рабочий процесс, лучше, чем ничего. Корпоративное приложение для iPad, над которым я работаю, содержит 67 классов с 503 свойствами. 🙂