#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:
- https://github.com/CraigWilliams/property_synthesize_dealloc
- 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 свойствами. 🙂