Требуется объяснение первого ответчика - PullRequest
7 голосов
/ 07 февраля 2011

Я задал вопрос здесь ранее относительно использования First Responder - и получил ответ здесь:

Проблема с первым респондентом

Кто-нибудь возражал бы дать мне версию этого "чайника"? Будучи новичком в Какао, я действительно не знаю, с чего начать ни одним из этих методов. Я быстро даю ответы

Zach

Ответы [ 2 ]

22 голосов
/ 07 февраля 2011

Первый респондент конкретно это .

То, о чем вы спрашиваете, это целевое действие. У вас есть объект пользовательского интерфейса (кнопка, элемент меню), который необходим для выполнения нескольких действий, но объект пользовательского интерфейса отправляет только одно действие.

Отсюда и решение: заставить это действие делать несколько вещей.

Подключите объект пользовательского интерфейса к методу действия, который вы реализуете в своем объекте контроллера (в вашем случае, в документе). В этом методе делайте все, что нужно для кнопки.

Решение по созданию подклассов в основном то же самое, за исключением того, что вместо подключения объекта пользовательского интерфейса к вашему документу вы подключаете его к диспетчеру шрифтов, но вы также делаете диспетчер шрифтов экземпляром подкласса NSFontManager, который вы создаете , а не экземпляр NSFontManager напрямую. В своем подклассе вы переопределяете addFontTrait: и добавляете другое поведение в вашу реализацию. В начале или в конце этого метода вы отправляете [super addFontTrait:sender], чтобы вызвать реализацию NSFontManager, поэтому исходная реализация будет выполнена.

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


Вы уже говорили, что «документация Apple невероятно расплывчата», но на самом деле это не так. Просто этого очень много, и, возможно, вы не искали нужные документы.

Это документы, которые вам нужно прочитать, от начала до конца и по порядку:

РЕДАКТИРОВАТЬ: Этот список для Xcode 3. Я опубликовал обновленную (для Xcode 4) версию этого списка в другой ответ .

  1. Язык программирования Objective-C
  2. Руководство по программированию управления памятью для какао
  3. Руководство по основам какао (которое, помимо прочего, объясняет целевое действие)
  4. Обзор архитектуры приложения
  5. Руководство по программированию ресурсов
  6. Руководство пользователя Interface Builder
  7. Руководства по Xcode 3:
    1. Руководство по управлению проектами Xcode
    2. Руководство по рабочей области XCode
    3. Руководство по системе сборки Xcode
    4. Руководство по отладке Xcode
  8. Обзор приложений на основе документов

Существует также Руководство пользователя по приборам , но, к сожалению, этот является расплывчатым или, если быть более точным, неполным. Он пропускает много полезной информации, например, как использовать шаблон инструментов Zombies для отладки сбоев. Это обзор высокого уровня, ничего более.

Также добавьте их в закладки:

  • Компетенции Cocoa Core , краткий справочник по всем концепциям, которые необходимо использовать
  • Справочник по основам
  • Справочник по AppKit Framework
  • Справочник по базовым основам
  • Справочник по базовой графической платформе

Это много для чтения, но оно расскажет вам все, что вам нужно знать, и этот порядок примерно соответствует порядку, в котором вы должны его знать.

1 голос
/ 07 февраля 2011

Другой ответ говорит, что у вас есть два варианта:

Во-первых: замените действие созданным вами, а затем самостоятельно реализуйте функцию оригинальной версии. В этом случае достаточно просто вызвать соответствующий метод NSFontManager. То есть вы добавляете оригинальную функциональность в вашу собственную реализацию метода. Таким образом, оба действия выполняются.

Второй: создайте подкласс класса, в котором реализована исходная функциональность, и добавьте свою реализацию, переопределив метод, который называется -addFontTrait. Таким образом, ваш код выполняется «рядом». Этот вопрос может помочь вам найти правильную реализацию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...