Как мне справиться с вводом вызовов вложенных сообщений в исходном коде ObjC только с клавиатуры?

Я думаю, что за последние полтора года, экспериментируя с разработкой Cocoa и Cocoa Touch, я изо всех сил пытался заставить Xcode поддерживать своего рода ключевой макрос для обработки этого конкретного сценария кодирования...

Я часто ловлю себя на том, что не знаю заранее, сколько диспетчеров сообщений нужно связать вместе при наборе новой строки кода. Например, я мог бы ввести это... (Символ вертикальной черты представляет положение курсора)

someVariable = [someObject someMessage]|

... Затем я понимаю, что мне нужно связать сообщение из возвращаемого объекта (поскольку обмен сообщениями nil безопасен в ObjC, это обычная идиома.) Поэтому мне нужно изменить строку кода, чтобы она выглядела так...

someVariable = [[someObject someMessage] |

Большой проблемой является необходимость добавлять левую скобку перед парой скобок, в конце которой я нахожусь, что повлечет за собой использование мыши или множество повторных нажатий клавиш каждый раз, когда мне нужно это сделать. Потратив впустую около 40 или около того часов, пытаясь найти какое-либо ранее существовавшее сочетание клавиш или сценарий (я исследовал Perl, сценарии оболочки и даже немного сценариев emacs Lisp в своем гугле), я собрал это чудовище. в AppleScript, из всех вещей...

tell application "System Events"
    delay 0.2
    set editMenu to menu "Edit" of menu bar item "Edit" in menu bar 1 of
         process "Xcode"
    set kLeftArrowKey to 123
    key code kLeftArrowKey
    set theMenu to menu item "Balance" in menu "Format" of menu item
         "Format" in editMenu
    click theMenu
    set theMenu to menu item "Bracket Expression" in menu "Objective C"
         of menu item "Objective C" in menu "Insert Text Macro" of menu
         item "Insert Text Macro" in editMenu
    click theMenu
    key code kLeftArrowKey
end tell

Должен быть лучший способ.

Я насчитал по крайней мере пять проблем с вышеизложенным... (которые я прокомментирую, если спросят). Я постоянно вижу частые онлайн-жалобы от новых разработчиков ObjC на этот синтаксис, и я подозреваю, что эта проблема с набором текста является основной проблемой. точка. Хотя мне нравится, как читается синтаксис (настолько, что я избегаю записи свойств через точку из соображений согласованности кода), то, как это сначала написано, отстой. (По иронии судьбы, как и AppleScript, учитывая мою текущую взломанную реализацию.)

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


person Des Courtney    schedule 08.12.2009    source источник
comment
Я полностью согласен ... это давно было любимой мозолью. Не знаю, какую версию xcode вы используете, но я заметил, что XCode 3.2 в Snow Leopard достаточно умен, чтобы справиться с этим «из коробки».   -  person Jarret Hardie    schedule 08.12.2009


Ответы (3)


Какую версию Xcode вы используете? В моей версии левые скобки добавляются автоматически, если я ввожу правую скобку после допустимого имени селектора.

В Xcode 3.2 перейдите в «Настройки», затем «Редактирование текста», затем выберите «Вставить открывающую скобку».

person dreamlax    schedule 08.12.2009
comment
Ну, черт. Цифры Apple, наконец, решит эту проблему после ШЕСТИ основных версий (и кто знает, сколько итераций NeXTStep). Жаль, что я пока застрял на 10.5... /-: - person Des Courtney; 08.12.2009

Если вы застряли на версии до Snow Leopard, вы можете попробовать использовать TextMate в качестве редактора. Он автоматически вставит соответствующие фигурные скобки и поддерживает версии OS X до 10.4. Это немного дорого (меньше, чем BBEdit, но больше, чем Xcode, который является бесплатным), но это действительно хороший редактор.

person Chuck    schedule 08.12.2009
comment
Хороший вопрос, это может помочь. Лично парадигмы редактирования TextMate настолько отличаются от большинства редакторов, что это немного сбивает меня с толку и снижает мою производительность. По моему опыту, использование только его — лучший/единственный способ обеспечить равномерную производительность; вы действительно должны войти в него, чтобы в полной мере пожинать плоды. - person Quinn Taylor; 08.12.2009
comment
Различные парадигмы редактирования TextMate отчасти являются причиной того, что я не могу рассматривать это прямо сейчас. Мои рабочие процессы только за последние два года включают Xcode, Textwrangler (урожденный BBEdit), Visual Studio и UltraEdit. Похоже, я застрял со своим сценарием, пока, наконец, не установил DVD 10.6... - person Des Courtney; 08.12.2009

До Xcode 3.2 мне часто приходилось сталкиваться с этой проблемой. Что-то, что облегчило мне боль, заключалось в использовании клавиши Option со стрелками влево / вправо для пропуска по словам. Гораздо лучше, чем ждать, пока оно пропустит письмо.

person Quinn Taylor    schedule 08.12.2009